完成上一个活动后,如何刷新活动中的列表视图?



我的活动之间的交互:

  1. 单击列表视图中的列表视图中的行.java>

  2. 转到"编辑".java编辑有关该特定行的信息>

  3. 完成编辑
  4. 后,单击按钮,这将完成编辑.java活动>

  5. 返回到列表视图.java。

但是,返回到列表视图.java FROM edit.java 时,它不会显示先前单击的列表视图特定行的新更新信息。

只有当我离开列表视图活动并再次返回时,信息才会更新。

列表视图.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。

列表视图.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
}     
}
} 

编辑.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();

这取决于项目的存储位置(数据库?(以及编辑活动是否将更改保存到数据库。 假设是这种情况,您应该

  • 在 ListView 活动中使用startActivityForResult()启动编辑活动
  • 在编辑活动中,用户完成后,使用setResult()finish()返回到 ListView 活动
  • 在 ListView 活动中使用onActivityResult()检查是否从编辑活动返回,如果是,请从数据库重新加载数据并使用 ListView 的notifyDataSetChanged()

这只是一个基本的工作流程,可以进行各种优化。

下面的代码演示了列表视图的基本实现。

在创建方法的活动中:

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((; 例如:在我的示例中,值数组中有 8 个项目:

values[7] = "Android Example List View";
adapter.notifyDataSetChanged();

然后,您将看到列表视图已更新。实际上,适配器采用数组,然后将该数据发送到列表视图。列表视图直接不处理字符串数组。每次对数组执行某种 CRUD 操作时,都会调用 adapter.notifyDataSetChanged((;,以反映您所做的更改。在应用程序期间,我通常会将数组换成数组列表,因为这样可以更轻松地添加和删除。

可以在onResume 方法活动中使用adapter.notifyDataSetChanged();,但最好使用startActivityForResultsetResult方法。

那里有很多问题。首先,在意向中发送该对象的属性,而不是对象本身。最快的方法(也许不是最好的(是发送对象(SalesItemInformationLV saleitem2(。为此,该对象需要实现可序列化接口。

这是传递可序列化对象的方法: 使用可序列化通过意向传递数据

使用此解决方案非常重要:https://developer.android.com/training/basics/intents/result.html?hl=en-419

然后,在 onActivityResult(( 中,您应该调用 adapter.notifyDataSetChanged((;

请记住将适配器声明为全局属性(在方法外部(。

最新更新