2017-04-05 7 views
1

実際にArrayAdapterがどのように機能するのか混乱していますか? ArrayAdapterでテストしていたときに、notifyDataSetChanged();をアダプタで呼び出すか、ListViewのアダプタを更新して(listView.setAdapter())ListViewのレコードを更新する必要があることを読んでください。ArrayAdapterは実際にListViewでどのように動作しますか?

このコードを確認してください。

public class MainActivity extends AppCompatActivity { 

    ArrayList<String> list = new ArrayList<>(); 
    ExampleArrayAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ListView listView = (ListView)findViewById(R.id.listView); 
     adapter = new ExampleArrayAdapter(this,list); 
     listView.setAdapter(adapter); 

     // Here I'm adding record after the listView.setAdapter(adapter); 
     // it is working fine. 
     list.add("Good"); 
     list.add("Bad"); 

    } 

    public void addData(View view){ 
     // but when I call this method from Button then it doesn't working. 
     list.add("New Data Added"); 
    } 
} 

これらの行には違いはありません。

list.add("Good"); 
list.add("Bad"); 

list.add("New Data Added"); 

両方がsetAdapter()後にレコードを追加しています。

なぜlist.add("New Data Added");が機能していないのですか?

+0

答えはありません、ただのアドバイス... Recyclerviewを使用してください。 – ElDuderino

+0

@ElDuderinoありがとうございますが、私は問題を解決していない、学びたいと思う。 – UnKnown

答えて

1

onCreate()アクティビティライフサイクル後onStart()およびonResume()で実行してください。 drawは、onCreate()以降です。したがって、2つの項目が表示されます。

addData(View view)実行後のビューはvisibleです。この場所で必要な値をリフレッシュするにはadapter.notifyDataSetChanged();

関連する問題