Android 启动“活动”时未填充ListView项

Android 启动“活动”时未填充ListView项,android,listview,android-listview,Android,Listview,Android Listview,以下是我的设想: 我有一个main活动和一个CustomListViewActivity。在我的主要活动中,我有一个按钮和一个微调器。单击按钮后,我通过Bundle并使用Intents将所选微调器值传递给CustomListViewActivity 现在,在CustomListViewActivity中,我有一个ListView,它使用ArrayAdapter来填充它。例如,我从MainActivity发送一个ArrayList items = [abc] 在我的CustomListView

以下是我的设想: 我有一个
main活动
和一个
CustomListViewActivity
。在我的主要活动中,我有一个按钮和一个微调器。单击按钮后,我通过
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();            
    }

 }
private ArrayList myItems;
私有静态字符串[]标题;
自定义列表视图适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.list_main);
listView=(listView)findViewById(R.id.list1);
rowItems=新的ArrayList();
adapter=新CustomListViewAdapter(此,R.layout.list_项,行项);
setAdapter(适配器);
b=getIntent().getExtras();
如果(b!=null)
{
myItems=b.getStringArrayList(“数据”);
titles=新字符串[myItems.size()];
标题=myItems.toArray(myItems);
} 
...
int i=0;

而(i您需要在MainActivity的
onSaveInstanceState
onRestoreInstanceState
方法中持久化和恢复

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


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

ok,在这种情况下,我需要在MainActivity中添加这两个方法并添加bundle.putStringArrayList(“数据”,items);在它们里面,对吗?你认为MyListViewActivity可以吗?我的意思是说有什么变化吗?MyListViewActivity中的onResume方法呢?MyListViewActivity很好。如果你在适配器上使用“add”方法添加行项目,你就不需要onResume中的任何代码。如果你想让手册通知我,我会uld在您的while(iI)编辑了我的代码并根据您的评论添加了一些更改后,将notifyDataSetChanged()调用移动到。但是,我在列表中仍然只得到1项:(请检查上面的代码,您可能误解了我。在onRestoreInstanceState中,您希望从捆绑包中获取项。Try items=icicle2.getStringArrayList(“数据”);