android-listview - 如何刷新Android列表数据?

  显示原文与译文双语对照的内容
101 4

我有一个 ListView 。我用 ArrayAdapter 填充了它的array 。 所有的数据都来自后端。 单击列表项时,我将导航到详细信息屏幕。

场景:

经理有一个由他/她的reportees发出的休假请求列表。 当经理选择休假请求时,它将显示特定休假请求的详细信息。 在详细信息屏幕中,经理可以批准/拒绝离开。 在批准/拒绝特定休假请求后,经理必须返回到休假请求列表。 现在,批准/拒绝的请假请求不应出现在列表中。

谁能告诉我如何在离开申请批准/拒绝的情况下刷新列表。

下面是我的适配器代码:


private class MyCustomAdapter extends ArrayAdapter<EmployeeLeaveHistory>
{
 private ArrayList<EmployeeLeaveHistory> leavesList;

 public MyCustomAdapter(Context context,
 int leaveOverviewListItem,
 ArrayList<EmployeeLeaveHistory> empLeaveOverview) {
//TODO Auto-generated constructor stub

 super(context, leaveOverviewListItem, empLeaveOverview);
 this.leavesList = new ArrayList<EmployeeLeaveHistory>();
 this.leavesList.addAll(empLeaveOverview);
 }
 public class ViewHolder{
 TextView status = null;
//TextView reason = null;
 TextView startDate = null;
 TextView duration = null;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent)
 {
 ViewHolder holder;

 LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 convertView = li.inflate(R.layout.leave_overview_list_item, null);

 holder = new ViewHolder();

 holder.startDate = (TextView) convertView.findViewById(R.id.txtLeaveRequestStartDate);
 holder.duration = (TextView) convertView.findViewById(R.id.txtLeaveRequestDuration);
 holder.status = (TextView) convertView.findViewById(R.id.txtLeaveRequestStatus);

 final EmployeeLeaveHistory elh = leavesList.get(position);
 convertView.setTag(elh);

 if(elh!= null)
 {
 elh.setListPosition(position);
 holder.startDate.setText(elh.getLeaveStartDate());
 holder.duration.setText(elh.getLeaveDuration());


holder.status.setText(elh.getLeaveStatus());
 } 

 return convertView;
 }
}

时间: 原作者:

149 1

尝试在你的Adapter 中调用 notifyDataSetChanged()

但是,请确保在 UI Thread 上调用这里函数,否则 ListView 将不会被刷新。


runOnUiThread(new Runnable() {
 @Override
 public void run() {
 YourAdapter adapter = listview.getAdapter();
 adapter.notifyDataSetChanged();
 }
});

原作者:
57 0

如果你使用 startActivityForResult() 启动详细信息 Activity,你可以:

在列表 Activity 中检查 RESULT_OK,然后查询数据库并更新适配器。

或者

在 Intent 中返回要从列表移除的项的id,并在不查询数据库的情况下从适配器中删除它

如果有并发用户可以批准/拒绝,第一个选项更好。 第二is性能更好。

...