2013-10-09 51 views
0

我有一个ListView。我用ArrayAdapter填充了一系列对象。所有数据都来自后端。当我点击列表项目时,我将导航到详细信息屏幕。如何刷新Android列表数据?

场景:

经理有他/她的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; 
    } 
} 

回答

2

尝试调用notifyDataSetChanged()Adapter

但是,请确保您在UI Thread上调用此功能,否则您的ListView将不会被刷新。

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

你可以请解释我如何在UI线程上调用notifyDataSetChange()。我对android编程没有太多的知识。 – user2740599

+0

嘿,我已经添加了一段在UI线程上运行的代码。 – gokhanakkurt

+0

我必须在这里调用这个方法。 – user2740599

0

如果启动使用startActivityForResult()你可以详细的活动:

列表中的活动检查RESULT_OK然后重新查询数据库和更新适配器。

或意图从列表中删除的项的ID从适配器自己删除它不查询数据库

回报

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