启动活动时未填充ListView项目

最后发布: 2013-11-20 15:00:17


问题

这是我的场景:我有一个MainActivity和一个CustomListViewActivity 在我的MainActivity中,我有1个按钮和1个微调器。 单击该按钮,我通过Bundle并使用Intents将选定的微调器值传递给CustomListViewActivity。

现在,在我的CustomListViewActivity中,我有一个ListView,它使用ArrayAdapter来填充它。 我从MainActivity发送一个ArrayList ,比如说

 items = [abc]

在我的CustomListViewActivity中,我收到相同的并使用它来填充我的ListView。 我第一次这样做,我的价值被填充。 第二次我这样做,现有的值现在被新的替换,ListView显示一个项而不是显示两个。

所以基本上问题是ListView没有更新,也没有显示这两个项目。 相反,它总是向我显示一个项目。

这是我的代码的片段

  MainActivity.java

//按钮内的代码点击..

        {          
            items.add(spinner1.getSelectedItem().toString());


                 Bundle bundle =new Bundle();                   
                 bundle.putStringArrayList("data",items);


                Intent i = new Intent(MainActivity.this,MyListViewActivity.class);
                i.putExtras(bundle);
                startActivity(i);
                finish();
        }

        protected void onSaveInstanceState(Bundle icicle) {
      super.onSaveInstanceState(icicle);
      Log.i("App","onSave");
      icicle.putStringArrayList("data",items);
    }

    @Override
        protected void onRestoreInstanceState(Bundle icicle2) {
     // TODO Auto-generated method stub
           super.onRestoreInstanceState(icicle2);
           Log.i("App","onRestore");
       icicle2.putStringArrayList("data",items);
     }

MyListViewActivity.java

      private ArrayList<String> myItems;
      private static String[] titles;
      CustomListViewAdapter adapter;

  @Override
       public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.list_main);

          listView = (ListView) findViewById(R.id.list1);
          rowItems = new ArrayList<RowItem>();
          adapter = new CustomListViewAdapter(this,R.layout.list_item, rowItems);
          listView.setAdapter(adapter);

          b=getIntent().getExtras();

          if(b!=null)
          {
              myItems=b.getStringArrayList("data");

             titles= new String[myItems.size()];
             titles = myItems.toArray(myItems);
          } 


          ...

            int i=0;
        while(i<titles.length) {
            item = new RowItem(titles[i]);
            //rowItems.add(item);
            Log.i("ROW", ""+rowItems.size());
            i++;
            adapter.add(item);
            listView.setAdapter(adapter);    
           }


           adapter.setNotifyOnChange(true);
           adapter.notifyDataSetChanged();            
    }

 }

如何使ListView维护当前数据以及反映添加的数据?

提前致谢

编辑 :忘了提一件事。 在我的MyListViewActivity类中,我在ListView上方有一个按钮,单击该按钮MyListViewActivity我带到我的MainActivity以便我可以再次添加一个新Item 因此,当我回到MainActivity并尝试添加一个新项目时,它是显示的新项目而不是显示前一个和新项目

android listview android-listview
回答

您需要在MainActivity的onSaveInstanceStateonRestoreInstanceState方法中保留并恢复items列表。

每次启动ListView活动时,您也可能不需要通过调用finish()来关闭MainActivity,但这取决于您的应用程序。

基本上,您遇到的问题是每次使用MainActivity的新实例都会重新创建items 由于您完成了MainActivity,每次访问该活动时都会使用一个新实例(我假设您认为项目只是不断添加项目)。