如何刷新Android列表适配器,因此它显示新增项目

我正在做一个项目。 它只是显示一个任务列表,并添加新的任务。 我有3个CLASSES。 一个用于添加,一个用于查看,另一个用于保存所有信息(或者我认为)。

我已经在我的列表中有2个任务,并且显示正确。

问题是,当我添加一个新的任务,它不会显示在视图中。 我尝试了许多可能的解决scheme:

这是我的代码,有点乱,但我希望你能弄明白。

AndroidListAdapterActivity类:

 public class AndroidListAdapterActivity extends ListActivity { /** Called when the activity is first created. */ Button b1; Lista o; ArrayAdapter aa; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.add); Log.w("POC", "PA OVO SE ZOVE SVAKI PUT"); o=new Lista(); o.lis.add("S1"); o.lis.add("S2"); aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, o.lis); setListAdapter(aa); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(AndroidListAdapterActivity.this, Dodavanje.class); startActivity(i); } }); } @Override public void onResume(){ super.onResume(); aa.notifyDataSetChanged(); if(o.broj>=2){ aa=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, o.lis2); setListAdapter(aa); Log.w("myApp", "CALLED TOO"); } String yt=String.valueOf(o.ses); Log.w("teras", yt); aa.notifyDataSetChanged(); Log.w("myApp", "CaLLED!!!!!!!!!!!!!"); String fx= String.valueOf(o.broj); Log.w("myAPPe", fx); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); } } 

多达凡涅(加):

 public class Dodavanje extends Activity { Button but; Button but2; EditText et; Lista o; AndroidListAdapterActivity www; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.dodavanje); but= (Button)findViewById(R.id.bb); but2= (Button)findViewById(R.id.bc); et=(EditText)findViewById(R.id.tt); www=new AndroidListAdapterActivity(); o = new Lista(); but.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("unchecked") @Override public void onClick(View arg0) { String t1= et.getText().toString(); //o.lis.add(t1); o.lis2.addAll(o.lis); o.lis2.add(t1); o.lis.add(t1); o.ses=true; Log.w("IZVJESTAJ: ", String.valueOf(o.ses)); o.broj++; String fx=String.valueOf(o.broj); Log.w("Izbacaj",fx); et.setText(""); } }); but2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); } } 

Lista(列表):

 public class Lista extends Application { ArrayList<String> lis=new ArrayList<String>(); ArrayList<String> lis2=new ArrayList<String>(); int broj =1; boolean ses= false; } 

Related of "如何刷新Android列表适配器,因此它显示新增项目"

每次数据更改时都必须使用。

 aa.notifyDataSetChanged(); 

你可以使用notifyDataSetChanged()方法来更新你的listview。在你的情况下你可以使用。

 aa.notifyDataSetChanged(); 

请尝试这种方式….

 public class MainActivity extends Activity { ListView lView; Button btnAdd; private ListView mainListView ; private ArrayAdapter<String> listAdapter ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainListView = (ListView) findViewById( R.id.listView1 ); btnAdd = (Button)findViewById(R.id.button1); // Create and populate a List of alphabet names. String[] alphabets = new String[] { "A", "B", "C", "D", "E", "F", "G", "H"}; ArrayList<String> alphabetsList= new ArrayList<String>(); alphabetsList.addAll( Arrays.asList(alphabets) ); // Create ArrayAdapter using the for the list. listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, alphabetsList); // Set the ArrayAdapter as the ListView's adapter. mainListView.setAdapter( listAdapter ); btnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub // Here I am adding more alphabets in the list on the listener of add button. listAdapter.add( "I" ); listAdapter.add( "J" ); listAdapter.add( "K" ); listAdapter.add( "L" ); listAdapter.add( "M" ); } }); } } 

extends BaseAdapter类,覆盖notifyDataSetChanged(); 方法。
请看下面的snip代码:

  @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); list.addAll();//--insert object to list } 

调用notifyDataSetChanged(); 方法在Activity onResume()方法中,如下所示:

 @Override protected void onResume() { super.onResume(); ((BaseAdapter)getListAdapter()).notifyDataSetChanged(); } 

迄今为止所提出的解决scheme都是可行的,但依赖于Android设备的版本。 例如,要使用AddAll方法,你必须把android:minSdkVersion =“10”放到你的android设备中。

为了解决所有设备的这个问题,我已经在适配器中创build了自己的方法,并且使用从ArrayAdapterinheritance的add和remove方法来更新数据。

我的代码:使用我自己的数据类RaceResult,你使用自己的数据模型。

ResultGpRowAdapter.java

 public class ResultGpRowAdapter extends ArrayAdapter<RaceResult> { Context context; int resource; List<RaceResult> data=null; public ResultGpRowAdapter(Context context, int resource, List<RaceResult> objects) { super(context, resource, objects); this.context = context; this.resource = resource; this.data = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { ........ } //my own method to populate data public void myAddAll(List<RaceResult> items) { for (RaceResult item:items){ super.add(item); } } 

ResultsGp.java

 public class ResultsGp extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ........... ........... ListView list = (ListView)findViewById(R.id.resultsGpList); ResultGpRowAdapter adapter = new ResultGpRowAdapter(this, R.layout.activity_result_gp_row, new ArrayList<RaceResult>()); //Empty data list.setAdapter(adapter); .... .... .... //LOAD a ArrayList<RaceResult> with data ArrayList<RaceResult> data = new ArrayList<RaceResult>(); data.add(new RaceResult(....)); data.add(new RaceResult(....)); ....... adapter.myAddAll(data); //Your list will be udpdated!!!