2016-04-25 3 views
0

Я использую просмотр пейджера с макетами прокрутки вкладок. И я показываю представление списка данных с помощью пользовательского адаптера. А также onclick из просмотра списка. У меня есть функция просмотра списка, где я показываю данные более подробно. В этих подробных действиях я выполняю некоторые изменения в данных (некоторые почтовые методы). после этого я создаю экземпляр класса customAdapter и вызываю notifyDataSetChanged(), чтобы обновить список. Моя проблема здесь в том, что просмотр списка несколько раз быстро обновляется, а иногда происходит задержка в несколько секунд. Итак, может ли кто-нибудь предложить мне правильное использование вида списка и какие изменения необходимо сделать, чтобы обновлять просмотр списка всякий раз, когда выполняется почтовый метод. Мой код класса Fragment:Пожалуйста, предложите мне правильное использование notifyDataSetChanged()

private void showJsonData(String response) { 

    try { 
     String serviceID = LoggedInUserStore.getLoggedInServiceId(getContext()); 
     List<Complaint> userList = new ArrayList<>(); //ArrayList of type user(POJO CLASS) 
     JSONArray jsonArray = new JSONArray(response); 

     for (int i = 0; i < jsonArray.length(); i++) { 
      if (serviceID.equals(jsonArray.getJSONObject(i).getString("ServiceID"))) { 
       if (jsonArray.getJSONObject(i).getString("CallStatusID").equalsIgnoreCase("1")) { 
        userList.add(0, Complaint.fromJson(jsonArray.getJSONObject(i))); // 
       } 
      } 

     } 

     assignAdapter = new AssignAdapter(getActivity(), userList); 
     listView.setAdapter(assignAdapter); 
     listView.invalidateViews(); 
     assignAdapter.notifyDataSetChanged(); 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

}

My custom adapter class 
public class AssignAdapter extends BaseAdapter implements Filterable { 
List<Complaint> ticket = new ArrayList<>(); 
private Context context; 
String ticketNo, complaint, raiseDate; 
Complaint user; 
List<Complaint> temporaryList = new ArrayList<>(); 

/*String status, priority;*/ 

public AssignAdapter(Context context, List<Complaint> ticket) { 
    this.context = context; 
    this.ticket = ticket; 
    this.temporaryList = ticket; 
} 

@Override 
public int getCount() { 
    return temporaryList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return temporaryList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

public class viewHolderItem { 
    TextView ticketNumberText, complaintNameText, raisedDateText; 
} 

//Set the layout for the fragment and return it. 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    viewHolderItem holder; 
    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.custom_list_view, null, true); 

     holder = new viewHolderItem(); 
     holder.ticketNumberText = (TextView) convertView.findViewById(R.id.ticketIdSupervisor); 
     holder.complaintNameText = (TextView) convertView.findViewById(R.id.complaintNameSupervisor); 
     convertView.setTag(holder); 
    } else { 
     holder = (viewHolderItem) convertView.getTag(); 
    } 

    user = temporaryList.get(position); 
    if (user != null) { 
     //Get the Ticket Number 
     Typeface custom_font = Typeface.createFromAsset(context.getAssets(), "fonts/DroidSerif.ttf"); 
     ticketNo = temporaryList.get(position).getTicketNumber(); 
     holder.ticketNumberText.setText(ticketNo); 
     holder.ticketNumberText.setTag("ticketNumber"); 
     holder.ticketNumberText.setTypeface(custom_font); 


     //Get the complaint Name 
     complaint = temporaryList.get(position).getComplaintDetails(); 
     holder.complaintNameText.setText(complaint); 
     holder.complaintNameText.setTag("complaint"); 
     holder.complaintNameText.setTypeface(custom_font); 

    } 
    convertView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(context.getApplicationContext(), ComplaintDetailsSupervisor.class); 
      i.putExtra("COMPLAINT NAME", temporaryList.get(position).getComplaintDetails()); 
      i.putExtra("RAISED DATE", temporaryList.get(position).getRaisedDate().substring(0, 10)); 
      context.startActivity(i); 
     } 
    }); 
    notifyDataSetChanged(); 
    return convertView; 
} 
public void notifyDataSetChanged() { 
    super.notifyDataSetChanged(); 
} 

}

Мой список детализированный вид деятельности Класс

dialogButtonOk.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         try { 
          assignComplaint(); 
          al.remove(position); 

          AssignAdapter assignAdapter = new AssignAdapter(getApplicationContext(), al); 
          assignAdapter.notifyDataSetChanged(); 

          ComplaintDetailsSupervisor.this.finish(); 


         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 

       dialogButtonNo.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 

       dialog.show(); 
      } 
     } 
    }); 


} 

public void assignComplaint() throws JSONException { 
    //my custom method... 
} 

В Подробный список деятельности класса я делаю это

al.remove(position); 
AssignAdapter assignAdapter = new AssignAdapter(getApplicationContext(), al); 
assignAdapter.notifyDataSetChanged(); 
ComplaintDetailsSupervisor.this.finish(); 

Извлечение позиции просмотра списка и моментального вызова адаптера. Это отлично работает, но я не знаю, почему иногда он не обновляется. Может быть, когда в представлении списка есть один элемент, он не обновляется немедленно.

+0

В каких случаях он не обновляется немедленно? – barq

+0

Скажите, когда в представлении списка есть несколько 5-6 элементов, когда я пытаюсь выполнить какой-либо почтовый метод, элемент не удаляется. Когда я выполняю функцию метода отправки, нужно удалить из списка. Но иногда это не исчезает ... пока я не перейду к обновлению. – Rakesh

+0

Я завершаю активность элемента lv, когда пользователи выполняют почтовый метод и отправят его обратно в фрагмент, где данные отображаются в виде списка с небольшой информацией. Элемент должен быть удален из этого фрагмента, который не случается несколько раз. – Rakesh

ответ

0

Вы создаете новый адаптер и вызываете notifyDatasetChanged, но не вызывали setAdapter с новым адаптером в качестве параметра, поэтому почему ваш список не обновлен.

Вам нужно позвонить

setAdapter(assignAdapter) 

или использовать существующую assignAdapter, а затем вызвать notifyDatasetChanged() на него.

+0

Я не могу установить адаптер в свой список. потому что он определен в моем фрагменте. & Я удаляю элемент из списка массивов в своей деятельности и вызываю notifyDataSetChanged. – Rakesh

+0

В onClickListener вашей кнопки вы создаете новый assignAdapter и никогда не устанавливаете его как адаптер в список. Таким образом, этот адаптер никогда не используется. – barq

+0

Я много искал, но не нашел решения. Сэр, можете ли вы рассказать мне, как установить адаптер для представления списка, который определен в классе фрагментов. – Rakesh

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