2013-10-09 77 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從適配器自己刪除它不查詢數據庫

回報

第一個選項是更好,如果你有併發用戶誰可以批准/拒絕。 第二個是性能更好。