如何刷新Android列表数据?

如何刷新Android列表数据?,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,我有一个列表视图。我已经使用ArrayAdapter用对象数组填充了它。所有数据都来自后端。单击列表项时,我将导航到详细信息屏幕 情景: 经理有其报告对象提出的请假请求列表。当经理选择休假请求时,它将显示特定休假请求的详细信息。在详细信息屏幕中,经理可以批准/拒绝休假。批准/拒绝特定休假请求后,经理必须导航回休假请求列表。现在,已批准/拒绝的请假请求不应出现在列表中 有谁能告诉我,在请假申请被批准/拒绝后,如何刷新列表 下面是我的适配器代码: private class MyCustomAdap

我有一个
列表视图
。我已经使用
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;
    }
}
私有类MyCustomAdapter扩展了ArrayAdapter
{
私人ArrayList leavesList;
公共MyCustomAdapter(上下文,
int leaveOverviewListItem,
ArrayList(概述){
//TODO自动生成的构造函数存根
super(上下文、leaveOverviewListItem、员工概述);
this.leavesList=新的ArrayList();
this.leavesList.addAll(雇员概述);
}
公共类视图持有者{
TextView状态=空;
//TextView原因=null;
TextView startDate=null;
TextView持续时间=空;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图)
{
视窗座;
LayoutInflater li=(LayoutInflater)getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=li.充气(R.layout.leave\u overview\u list\u item,空);
holder=新的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);
最终员工离职历史elh=离职名单获取(职位);
convertView.setTag(elh);
如果(elh!=null)
{
elh.设置列表位置(位置);
holder.startDate.setText(elh.getLeaveStartDate());
holder.duration.setText(elh.getLeaveDuration());
holder.status.setText(elh.getLeaveStatus());
}           
返回视图;
}
}
尝试调用您的
适配器

但是,请确保在
UI线程上调用此函数,否则将不会刷新
ListView

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

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

检查列表活动中的
RESULT\u OK
,然后重新查询数据库并更新适配器

在intent中返回要从列表中删除的项的id,并自己从适配器中删除它,而不查询数据库

如果您有可以批准/拒绝的并发用户,则第一个选项更好。
第二种方法对性能更好。

您能解释一下如何在UI线程上调用notifyDataSetChange()。我没有那么多关于android编程的知识。嘿,我已经添加了一段在UI线程上运行的代码。我必须调用这个方法。我也发布了我的适配器。请帮帮我。您在哪里设置了
列表视图的适配器?