2016-02-17 2 views
-2

У меня есть recyclerview со списком имен и флажков. Когда я просматриваю список, проверяя несколько элементов в списке, положение флажков меняется. Пробовал много, чтобы избавиться от него. Может ли кто-нибудь помочь?Recyclerview с флажками изменения порядка на прокрутке

У меня есть отдельный класс модели и адаптера, и мой родительский вид на recyclerview является фрагментом поверх операции.

Я также могу предоставить код для справки.

Спасибо!

Fragment.java

recyclerView = (RecyclerView) getView().findViewById(R.id.my_recycler_view2); 
     recyclerView.setHasFixedSize(true); 
     LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
     llm.setOrientation(LinearLayoutManager.VERTICAL); 
     recyclerView.setLayoutManager(llm); 


     try{ 
      data = new JSONObject(MainActivity.responseobject); 
      //data.getJSONArray("Children"); 
      demoData = new ArrayList<Model>(); 
      for(int i=0;i<data.getJSONArray("Children").length();i++) 
      { 
       Model model = new Model(); 
       model.name = data.getJSONArray("Children").getJSONObject(i).getJSONObject("Child").getString("childName"); 
       model.zone = data.getJSONArray("Children").getJSONObject(i).getJSONObject("Child").getString("Zone"); 
       model.latitude = data.getJSONArray("Children").getJSONObject(i).getJSONObject("Child").getString("childLat"); 
       model.longitude= data.getJSONArray("Children").getJSONObject(i).getJSONObject("Child").getString("childLon"); 
       model.isChecked=MainActivity.checkedall?true:false; 
       model.studentid = data.getJSONArray("Children").getJSONObject(i).getJSONObject("Child").getString("ParentID"); 
       demoData.add(model); 
      } 

      adapter = new RecyclerViewAdapterMessage(demoData,getActivity()); 
      recyclerView.setAdapter(adapter); 

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

Adapter.java 

@Override 
    public ListItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
     View itemView = LayoutInflater.from(viewGroup.getContext()). 
       inflate(R.layout.recyclerview_messageitem, viewGroup, false); 

     return new ListItemViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final ListItemViewHolder viewHolder, int position) { 

     final Model model = items.get(position); 
     viewHolder.name.setText(String.valueOf(model.name)); 
     //viewHolder.itemView.setActivated(model.isChecked); 
     viewHolder.select.setActivated(viewHolder.checkboxstate); 
     viewHolder.checkboxstate = false; 
     System.out.println(selectedItems.toString()); 
     viewHolder.select.setTag(model); 
     if (MainActivity.checkedall) { 
      for (int i = 0; i < items.size(); i++) { 
       if (MainActivity.checkedall) { 
        viewHolder.select.setActivated(viewHolder.checkboxstate); 
        System.out.println("ALL CHECKED INSIDE AVA"); 
       } 
      } 
     } 

     viewHolder.select.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       CheckBox cb = (CheckBox) v; 
       Model contact = (Model) cb.getTag(); 
       contact.isChecked = true; 
       /* if(){ 

       }else{ 

       }*/ 
       if(cb.isChecked()){ 
        TwoFragment.sid=TwoFragment.sid+","+contact.studentid; 
        //contact.studentid = contact.studentid; 
        //notifyDataSetChanged(); 
        Toast.makeText(v.getContext(), "Clicked on Checkbox: " + contact.name + " is " + cb.isChecked() +" "+contact.studentid, Toast.LENGTH_LONG).show(); 
       } 
       } 
     }); 
     //model.studentid 




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

    @Override 
    public int getItemCount() { 
     return items.size(); 
    } 
    public Model getItem(int position){ 
     return items.get(position); 
    } 

    public final static class ListItemViewHolder extends RecyclerView.ViewHolder { 
     TextView name; 
     CheckBox select; 
     boolean checkboxstate; 

     public ListItemViewHolder(View itemView) { 
      super(itemView); 
      name = (TextView) itemView.findViewById(R.id.person_name); 
      select=(CheckBox) itemView.findViewById(R.id.person_zone); 
     } 
    } 
    public List<Model> getStudentist() { 
     return items; 
    } 

Я предоставил код класса фрагмента и класса адаптера.

+0

разместить код адаптера. –

+0

Код –

+0

Что происходит, мне нужно выбрать пользователей из списка по флажку n, чтобы отправить сообщение и отправить его. Хотя после прокрутки положение флажков меняется, но исходное значение находится в памяти, но визуальное представление идет не так. Никаких проблем с функциональной частью. –

ответ

0

Я не могу понять, почему вы делаете это в onBindViewHolder.

if (MainActivity.checkedall) { 
     for (int i = 0; i < items.size(); i++) { 
      if (MainActivity.checkedall) { 
       viewHolder.select.setActivated(viewHolder.checkboxstate); 
       System.out.println("ALL CHECKED INSIDE AVA"); 
      } 
     } 
    } 

для этого на щелчке выберите все точки зрения, действительно изменяет model.isChecked это значение верно и просто вызвать adapter.notifyDataSetChanged();. Также нет необходимости в этом checkboxstate в ViewHolder

А про проверьте флажок

viewHolder.select.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      // Just Do this 
      model.isChecked = viewHolder.select.isChecked(); 

      if(viewHolder.select.isChecked()){ 
       TwoFragment.sid=TwoFragment.sid+","+contact.studentid; 

       Toast.makeText(v.getContext(), "Clicked on Checkbox: " + model.name + " is " + viewHolder.select.isChecked() +" "+model.studentid, Toast.LENGTH_LONG).show(); 
      } 
      } 
    }); 

И наконец

if(model.isChecked) 
    viewHolder.select.setChecked(true); 
else 
    viewHolder.select.setChecked(false) 
+0

Спасибо Creative Android. Решила цель! Спасибо за ваше время . –

+0

Если это поможет вам отметить его как принять и сделать upvote –

+0

Done bro !! Спасибо –

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