[英]How to refresh a listview in an Activity after finishing the previous Activity?
我的活动之间的互动:
在listview.java中的listview中单击一行>
转到Edit.java以编辑有关该特定行的信息>
完成编辑后,单击按钮,将完成edit.java活动>
返回到listview.java。
但是,从edit.java返回到listview.java时,它不会显示先前单击的listview的特定行的新更新信息。
仅当我离开listview活动并再次返回时,信息才被新更新。
listview.java:
MyItems mi;
private ArrayList<SalesItemInformationLV> displayiteminfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_sale_item);
mi = MyItems.getInstance();
displayiteminfo = mi.retrieveAllForlist(getApplicationContext());
final ArrayAdapter<SalesItemInformationLV> adapter = new itemArrayAdapter(this, 0, displayiteminfo);
final ListView listView = (ListView)findViewById(R.id.customListview);
listView.setAdapter(adapter);
// adapter.notifyDataSetChanged(); Place this code here but it does not work
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
SalesItemInformationLV saleitem2 = displayiteminfo2.get(info.position);
String namevalue = saleitem2.getItemname();
Double costpvalue = saleitem2.getCostprice();
Double sellpvalue = saleitem2.getSellingprice();
int qtyvalue = saleitem2.getItemquantity();
String datevalue = saleitem2.getDatesold();
int staffvalue = saleitem2.getStaffdiscount();
Intent myintent = new Intent(List.this, Edit.class);
myintent.putExtra("array", saleitem2);
myintent.putExtra("itemname", namevalue);
myintent.putExtra("itemcp", costpvalue);
myintent.putExtra("itemsp", sellpvalue);
myintent.putExtra("itemqty", qtyvalue);
myintent.putExtra("itemds", datevalue);
myintent.putExtra("itemsstaffdis", staffvalue);
startActivity(myintent);
}
来自步骤1、2和3的数据流。
listview.java:
// Step 1 (Send data to edit.class)
Intent i = new Intent(this, Edit.class);
startActivityForResult(i, 1);
// Step 3 (Receive new data)
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if(resultCode == RESULT_OK) {
String strEditText = data.getStringExtra("key");
// update your listview in here with new data
}
}
}
Edit.java:
// Step 2 (Edit data in here, and send to listview.java with setResult)
Intent intent = new Intent();
intent.putExtra("key", "value")
setResult(RESULT_OK, intent);
finish();
这取决于项目的存储位置(数据库?)以及编辑活动是否将更改保存到数据库中。 假设是这种情况,您应该
startActivityForResult()
启动编辑活动 setResult()
和finish()
返回到listview活动 onActivityResult()
来检查您是否退出了edit活动,如果是,请从数据库中重新加载数据并使用listview的notifyDataSetChanged()
这只是基本的工作流程,可以进行各种优化。
以下代码演示了列表视图的基本实现。
在活动onCreate方法中:
ListView listView = (ListView) findViewById(R.id.list);
// Defined Array values to show in ListView
String[] values = new String[] { "Android List View",
"Adapter",
"Simple List View ",
"Create List View ",
"Android Example",
"List View ",
"Array Adapter",
"Android List View"
};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
listView.setAdapter(adapter);
在对字符串数组(即值)进行添加/删除/更新之后,然后调用适配器。notifydatasetchanged(); 例如:在我的示例中,values数组中有8个项目:
values[7] = "Android Example List View";
adapter.notifyDataSetChanged();
然后,您将看到列表视图已更新。 实际上,您的适配器采用了Array,然后将该数据发送到列表视图。 Listview直接不处理字符串数组。 每次对数组执行某种CRUD操作时,都调用adapter.notifyDataSetChanged();。 以便列表视图反映您所做的更改。 在应用过程中,我通常将Array换成Arraylist,因为这使添加和删除变得更加容易。
那里有很多问题。 首先,您要按意图发送该对象的属性,而不是对象本身。 最快的方法(不是最好的方法)是发送对象(SalesItemInformationLV saleitem2)。 为此,该对象需要实现Serializable接口。
这是传递可序列化对象的方法: 使用Serializable通过意图传递数据
使用此解决方案很重要: https : //developer.android.com/training/basics/intents/result.html?hl=zh-419
然后,在onActivityResult()中,应调用adapter.notifyDataSetChanged();。
请记住,将适配器声明为全局属性(方法之外)。
您可以使用adapter.notifyDataSetChanged();
在onResume方法活动中,但最好使用startActivityForResult
和setResult
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.