我有两个简单的活动 - 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
提前感谢你!
答案 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。