在另一个Activity中更新后刷新ListView

时间:2012-11-30 11:02:48

标签: android listview android-arrayadapter

我有两个简单的活动 - Activity1:Array中的ListView Activity2:EditText用于编辑Activity1中单击的行

当我在Activity2中编辑值并返回到Activity1时,ListView不会重新加载新值。

当我从Activity2返回或恢复Activity1或将更新列表的内容时,我想刷新ListView。

我的代码:

static ArrayAdapter<String> dataAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            // Loading the values to list array
        String[][] fulllist = loadArrays();
        String[] list = new String[fulllist.length];
        for(int i = 0; i<fulllist.length; i++) {
            list[i] =  fulllist[i][1];
            }
            // --------------------------------

            dataAdapter = new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_1,
                                list);
            setListAdapter(dataAdapter);
            }
@Override
public void onResume() {
        super.onResume();
        // Loading the values to list array
        String[][] fulllist = loadArrays();
        String[] list = new String[fulllist.length];
        for(int i = 0; i<fulllist.length; i++) {
            list[i] =  fulllist[i][1];
            }
        // --------------------------------

        dataAdapter = new ArrayAdapter<String>(this,
                            android.R.layout.simple_list_item_1,
                            list);
        dataAdapter.notifyDataSetChanged();
}

loadArrays()只是从SharedPreferences转换为String Array的方法。 Activity2将新数据保存在SharedPreferences中,而Activity1可以读取它(使用新数据)。 如果我返回“主要活动”(它不是Activity1)而不是返回到Activity1 - 会显示新数据,但我希望当我立即从Activity2返回时,这些数据会被更新。

loadArrays()方法:pastebin.com/MHwNC0jK

提前感谢你!

3 个答案:

答案 0 :(得分:11)

点击第一个活动中的项目后,使用startActivityForResult()

开始第二个活动

然后在第二个活动中,进入EditText后,可能会有一个按钮。在该按钮调用的onClick中,

intent.putExtra("edittextvalue", findViewById(R.id.edittext).getText().toString());
setResult(RESULT_OK, intent);
finish();

现在您回到第一个Activity,在这里您必须实现onActivityResult()回调。您可以从该intent的附加内容中提取数据,并在数组中设置相应的项目并调用notifyDataSetChanged()

理想情况下,您应该如何做到这一点。

如果您想了解有关如何使用startActivityForResult()的更多信息,请尝试此链接 - http://manisivapuram.blogspot.in/2011/06/how-to-use-startactivityforresult.html

答案 1 :(得分:1)

1)获取参考ListView

mListView = (ListView)findViewById(R.id.auto_listview);

2)创建适配器再次更改值

MyAdapter myAdapter = new MyAdapter(getApplicationContext(), 
                                    R.layout.locations_list_item_layout,dataArray;
mListView.setAdapter(myAdapter);

setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> adapterView,
                        View view, int i, long l) {

myAdapter = new MyAdapter(getApplicationContext(), 
    //pass changed values vlues array                               R.layout.locations_list_item_layout,dataArray;
mListView.setAdapter(myAdapter);

}

                public void onNothingSelected(AdapterView<?> arg0) {
                    // TODO Auto-generated method stub

                }
            });

答案 2 :(得分:-3)

将完整列表声明为全局变量并使用静态arraylist。