2013-10-09 4 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

Не могли бы вы объяснить мне, как вызвать notifyDataSetChange() в потоке пользовательского интерфейса. У меня не так много знаний по программированию на Android. – user2740599

+0

Эй, я уже добавил фрагмент кода, который работает на тему пользовательского интерфейса. – gokhanakkurt

+0

Где я должен назвать этот метод. – user2740599

0

Если вы запустите деталь активности с помощью startActivityForResult() вы можете:

Проверить RESULT_OK в списке активности затем повторно запрашивать базу данных и обновлять адаптер.

ИЛИ

возвращение в умыслом идентификатор элемента, который будет удален из списка и удалить его из адаптера самостоятельно без запросов к базе данных

Первый вариант лучше, если у вас есть одновременно работающих пользователей, которые может одобрить/отклонить. Второй вариант лучше для исполнения.

Смежные вопросы