【问题标题】:Refresh ListView after updating in another Activity在另一个 Activity 中更新后刷新 ListView
【发布时间】:2012-11-30 11:02:48
【问题描述】:

我有两个简单的活动 - Activity1:数组中的 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 转换为字符串数组的方法。 Activity2 将新数据保存在 SharedPreferences 中,然后 Activity1 可以读取它(使用新数据)。 如果我返回“主要活动”(它不是 Activity1)然后返回 Activity1 - 将显示新数据,但我希望在我立即从 Activity2 返回时更新这些数据。

loadArrays() 方法:pastebin.com/MHwNC0jK

提前感谢您!

【问题讨论】:

  • loadArrays() 的代码将有助于更好地理解

标签: android listview android-arrayadapter


【解决方案1】:

在您的第一个 Activity 中单击该项目时,使用 startActivityForResult() 启动您的第二个 Activity

然后在Second Activity中,输入EditText后,大概有一个按钮。在那个按钮调用的onClick 中,

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

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

理想情况下,您应该这样做。

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

【讨论】:

  • 这会给我一些与我想要的不同的数据和结果,但我会检查一下。
【解决方案2】:

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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-12
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      相关资源
      最近更新 更多