启动活动时未填充ListView项目

时间:2013-11-20 15:00:17

标签: android listview android-listview

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

现在,在我的CustomListViewActivity中,我有一个使用ArrayAdapter填充它的ListView。我从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上方有一个按钮,点击该按钮会将我带到MainActivity,以便我可以再次添加新的Item。因此,当我回到MainActivity并尝试添加一个新项目时,它是显示的新项目,而不是显示前一个和新项目

1 个答案:

答案 0 :(得分:2)

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

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

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