我有ListView
。我使用ArrayAdapter
填充了对象数组。所有数据都来自后端。当我点击列表项时,我将导航到详细信息屏幕。
场景:
经理有一份他/她的报告人提出的休假请求清单。当经理选择请假请求时,它将显示特定请假请求的详细信息。在详细信息屏幕中,经理可以批准/拒绝请假。在批准/拒绝特定请假申请后,经理必须导航回请假申请列表。现在,批准/拒绝的请假申请不应出现在列表中。
任何人都可以告诉我如何在批准/拒绝请假申请后刷新清单。
以下是我的适配器代码:
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;
}
}
答案 0 :(得分:2)
尝试拨打Adapter
上的notifyDataSetChanged()
。
但是,请确保您在UI Thread
上调用此功能,否则您的ListView
将无法刷新。
runOnUiThread(new Runnable() {
@Override
public void run() {
YourAdapter adapter = listview.getAdapter();
adapter.notifyDataSetChanged();
}
});
答案 1 :(得分:0)
如果您使用startActivityForResult()
启动详情活动,则可以:
检查列表活动中的RESULT_OK
,然后重新查询数据库并更新适配器。
OR
在intent中返回要从列表中删除的项的id,并在不查询数据库的情况下自行将其从适配器中删除
如果您有可以批准/拒绝的并发用户,则第一个选项会更好。 第二个是更好的表现。