Android:当我从另一个活动传递数据时,ListView不会更新

时间:2014-07-23 23:19:36

标签: android android-layout android-intent android-activity android-listview

我是Android新手,我正在制作基于listview的应用程序。在我的应用程序中,我有从Acitity_2到Activity_1的项目。 Activity_1具有列表视图。当用户单击activity1的ADD按钮时,将调用Activity_2。 Activity_2具有EditText。 EditText的值应该更新ListView。但它只占用Edittext的最后一个值。

以下是Activity_2的代码:

          Intent intent = new Intent(ItemDetails.this, MainActivity.class);
          intent.putExtra("values", values);
          startActivity(intent);

Activity_1代码

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

/** Declaring an ArrayAdapter to set items to ListView */
ArrayAdapter<String> adapter;

protected Context context;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    /** Setting a custom layout for the list activity */
    setContentView(R.layout.activity_main);

    /** Reference to the add button of the layout main.xml */
    Button btn = (Button) findViewById(R.id.btnAdd);

    /** Reference to the delete button of the layout main.xml */
    Button btnDel = (Button) findViewById(R.id.btnDel);




    /** Defining the ArrayAdapter to set items to ListView */
   adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list);
    list.clear();
   list.add("Aluminium foil");
   /** Setting the adapter to the ListView */
   setListAdapter(adapter);

   String val="";
   if(getIntent().getStringExtra("values")!=null &&    getIntent().getStringExtra("values").length() > 0){
       val = getIntent().getStringExtra("values");
       list.add(val);
  }                    

   adapter.notifyDataSetChanged();

现在它覆盖了edittext的最后一个值。 建议表示赞赏。

6 个答案:

答案 0 :(得分:3)

有什么好处吗?

首次将适配器设置为

adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list);
listView.setAdapter(adapter);

从活动2回来

 String val="";
         if(getIntent().getStringExtra("values")!=null &&    getIntent().getStringExtra("values").length > 0){
    val = getIntent().getStringExtra("values");
    list.add(val);
        }                    

adapter.notifyDataSetChanged();

每次回来时,你基本上不必创建新的适配器对象

答案 1 :(得分:0)

您应该使用startActivityForResult启动第二个Activity。然后在editext中插入值并完成发送回结果的活动。在activity1中截取methos onActivityResult中的结果并更新listview。

查看此有关活动结果的链接: http://developer.android.com/training/basics/intents/result.html

答案 2 :(得分:0)

要让Android更新您的列表视图,您需要在notifyDataSetChanged()上致电Adapter

答案 3 :(得分:0)

仅仅更新您的数据集还不够,您必须让Adapter知道,以便再次读取数据并更新列表。我无法从您的代码中看到您调整适配器的内容,但只需在适配器上调用notifyDataSetChanged()即可。

答案 4 :(得分:0)

有很多种方法......但最简单的解决方案是使用:refreshDisplay();

答案 5 :(得分:0)

这样做,

String itemVal=getIntent().getStringExtra("values");
            if(itemVal==null){

            }else{
                list.add(itemVal);

            }
adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_multiple_choice, list);