在另一个活动中更新后刷新ListView

6
我有两个简单的活动 - Activity1:从数组中获取的 ListView Activity2:用于编辑 Activity1 中所点击行的 EditText
当我在 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 转换为字符串数组的方法。Activity2 将新数据保存在 SharedPreferences 中,然后 Activity1 可以读取它(包括新数据)。 如果我返回到“主活动”(不是 Activity1),然后再回到 Activity1,则会显示新数据,但我希望当我立即从 Activity2 返回时,数据将被更新。

loadArrays() 方法:pastebin.com/MHwNC0jK

提前感谢您!


loadArrays()的代码将有助于更好地理解。 - Shakti
3个回答

14

当您在第一个Activity中点击项目时,请使用startActivityForResult()启动第二个Activity。

然后在第二个Activity中,在输入EditText之后,可能会有一个按钮。 在该按钮的onClick中调用:

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

现在您回到第一个Activity,这里您需要实现onActivityResult()回调函数。您可以从Intent的extras中提取数据并将其设置为数组中相应的项,然后调用notifyDataSetChanged()

这是您应该遵循的理想做法。

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


这将给我一些与我想要的不同的数据和结果,但我会检查它。 - Dennis

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

                }
            });

-3

声明fulllist为全局变量并使用静态数组列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接