2017-02-12 5 views
-2

私はこの奇妙な問題にいくつかの助けをすることができます。 最初の読み込み時に、私のリストビューは空白です。 別のアクティビティを終了するか、同じアクティビティをリフレッシュしてページを再度ロードすると、私のリストが表示されます。 アイデアありがとう。アダプターメソッドnotifyDataSetChanged not refresh listview

マイ変数:

private static ArrayList<Media_Info> mediaIntroQueueList = new ArrayList<Media_Info>(); 
private static ArrayList<String> mediaIntroQueueListTitles = new ArrayList<>(); 
ArrayAdapter<String> stringAdapter; 
ListView mediaList; 

OnCreate関数:あなたはmediaIntroQueueListTitlesに新しいのArrayListを割り当てられたので、私は私のstringAdapter

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_meet); 

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(myToolbar); 

    // LOG 
    Log.i("Constants", Constants.userID); 

    mediaList = (ListView) findViewById(R.id.mediaListView); 

    stringAdapter = new ArrayAdapter<>(
      this, 
      android.R.layout.simple_list_item_1, 
      mediaIntroQueueListTitles); 
    mediaList.setAdapter(stringAdapter); 


@Override 
protected void onStart() { 
    super.onStart(); 

    Log.i("ACTIVITY", "onStart"); 

    getUserLocation(); 

    getLocalIntroductions(); 

} 

private void getLocalIntroductions() { 

/// a bunch of firebase db calls 

       if (mediaLocationKeysWithinRadius.contains(mediaID)) { 

        Log.i("media within radius: ", mediaID); 
        newItems.add(mediaInfoDic); 
        newItemsTitles.add(title); 

        } 
       else { 
        Log.i("media not in radius: ", mediaID); 
       } 
      } 

      mediaIntroQueueList = newItems; 
      mediaIntroQueueListTitles = newItemsTitles; 

      stringAdapter.notifyDataSetChanged(); 
+0

最初に起動したmediaIdが表示されますか?正に、私が見る限り、アダプタのデータに項目を追加することはないので、リストに項目が表示されているのには驚いています。またコードが完全ではない –

+0

コードを書式設定できますか?データセットを更新した直後に 'stringAdapter.notifyDataSetChanged()'を呼び出すことはできますか? – Raghunandan

答えて

0

を設定します。 add()を直接使うべきです。

private void getLocalIntroductions() { 

    /// a bunch of firebase db calls 
    // Clear your ArrayLists if you need to 
    mediaIntroQueueList.clear(); 
    mediaIntroQueueListTitles.clear(); 
    if (mediaLocationKeysWithinRadius.contains(mediaID)) { 
     Log.i("media within radius: ", mediaID); 
     mediaIntroQueueList.add(mediaInfoDic); 
     mediaIntroQueueListTitles.add(title); 
    } 
    else { 
     Log.i("media not in radius: ", mediaID); 
    } 
    stringAdapter.notifyDataSetChanged(); 
} 
+0

これは、私の意見では、_adapter_が持っていた参照が独自​​の要素を持つ新しいリストに割り当てられているので、 'notifyDataSetChanged()'は新しいリストに対して_ListView_を更新する必要があるからです。 –

+0

これらは変更され、これにより私の問題が解決されました。 – makthrow

+0

@ShoaibAnwar arraylistオブジェクトに新しいarraylistを割り当てる場合。アダプタはあなたのリストへの参照を失い、notifyDataSetChanged()は動作しません。 – myatmins

関連する問題