2016-04-28 6 views
0

Ich habe eine Liste von Aufgaben in Recyclerview. Jedes Aufgabenelement verfügt über ein Kontrollkästchen, um anzuzeigen, ob die Aufgabe abgeschlossen oder ausstehend ist.Wie fügen Sie Abschnitte für geprüfte und ungeprüfte Elemente in der Recycleransicht hinzu?

Jetzt möchte ich zwei Abschnitte in meiner Liste zeigen. Eine für geprüfte Artikel und eine weitere für nicht geprüfte Artikel.

Ich bin durch diese Bibliothek gegangen, um die Abschnitte hinzuzufügen.

https://github.com/afollestad/sectioned-recyclerview

Aber wie kann ich die Elemente in der Liste auf der Basis teile von ihnen oder nicht überprüft werden? Auch ich möchte die Aufgabe in einen anderen Abschnitt hinzufügen, wenn aktiviert oder deaktiviert, d. H. OnClick.

Wenn Task deaktiviert ist, und wenn ich es überprüfe, sollte es zum vervollständigten Abschnitt hinzugefügt werden und umgekehrt.

Ich habe eine Recyclerview jetzt mit Swipe-Layout. Folgendes ist der Adapter.

adapetr:

public class IAdapter extends RecyclerSwipeAdapter<IAdapter.ItemViewHolder> , SectionedRecyclerViewAdapter<IAdapter.ItemViewHolder> { 

    public ArrayList<Task> items; 
    Context conext; 
    public int _mId; 

    List<Task> itemsPendingRemoval = new ArrayList<>(); 

    public IAdapter(Context context, ArrayList<Task> item) { 
     this.conext=context; 
     this.items=item; 
    } 

    @Override 
    public int getSectionCount() { 
     return 2; 
    } 

    @Override 
    public int getItemCount(int section) { 
     return items.size(); 

    } 

    public static class ItemViewHolder extends RecyclerView.ViewHolder { 
     Task task; 
     CheckBox cb; 
     SwipeLayout swipeLayout; 
     TaskTableHelper taskTableHelper; 
     ItemViewHolder(final View itemView) { 
      super(itemView); 

      taskTableHelper= new TaskTableHelper(itemView.getContext()); 
      swipeLayout = (SwipeLayout) itemView.findViewById(R.id.swipe); 
      cb = (CheckBox) itemView.findViewById(R.id.checkbox); 

     } 
    } 

    @Override 
    public void onBindViewHolder(final ItemViewHolder itemViewHolder,final int i) { 

     itemViewHolder.cb.setText(items.get(i).getTitle()); 

     itemViewHolder.task = items.get(i); 

     int taskId = itemViewHolder.task.getId(); 

     itemViewHolder.task = itemViewHolder.taskTableHelper.getTask(taskId); 

     int status = itemViewHolder.task.getStatus(); 

     if(status == 0) 
     { 
      itemViewHolder.cb.setTextColor(Color.WHITE); 
     } 

     else { 

      itemViewHolder.cb.setChecked(true); 

      itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5")); 

     } 


     itemViewHolder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 

       if (isChecked) { 

        itemViewHolder.cb.setTextColor(Color.parseColor("#B0BEC5")); 

        itemViewHolder.task.setStatus(1); 

        itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task); 

       } 
       else 

       { 

        itemViewHolder.cb.setTextColor(Color.WHITE); 

        itemViewHolder.task.setStatus(0); 

        itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task); 

       } 

      } 

     }); 



     final Task item = items.get(i); 
     itemViewHolder.swipeLayout.addDrag(SwipeLayout.DragEdge.Right,itemViewHolder.swipeLayout.findViewById(R.id.bottom_wrapper_2)); 
     itemViewHolder.swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); 

     itemViewHolder.swipeLayout.setOnDoubleClickListener(new SwipeLayout.DoubleClickListener() { 
      @Override 
      public void onDoubleClick(SwipeLayout layout, boolean surface) { 
       Toast.makeText(conext, "DoubleClick", Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     itemViewHolder.swipeLayout.findViewById(R.id.trash2).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       mItemManger.removeShownLayouts(itemViewHolder.swipeLayout); 
       items.remove(i); 
       notifyItemRemoved(i); 
       notifyItemRangeChanged(i, items.size()); 
       mItemManger.closeAllItems(); 

       itemViewHolder.taskTableHelper.deleteTask(item); 

       _mId = item.getAlertId(); 

       cancelNotification(); 

       Toast.makeText(view.getContext(), "Deleted " + itemViewHolder.cb.getText().toString() + "!", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     itemViewHolder.swipeLayout.findViewById(R.id.done).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       itemViewHolder.task.setStatus(1); 
       itemViewHolder.taskTableHelper.updateStatus(itemViewHolder.task); 
       itemViewHolder.cb.setChecked(true); 
       Toast.makeText(conext, "Task Completed.", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     itemViewHolder.swipeLayout.getSurfaceView().setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       boolean mEditMode; 

       int id = item.getId(); 
       int priority = item.getTaskPriority(); 
       String title = item.getTitle(); 
       String alertDate = item.getAlertDate(); 
       String alertTime = item.getAlertTime(); 
       String dueDate = item.getDueDate(); 
       String dueTime = item.getDueTime(); 
       _mId = item.getAlertId(); 

       int listId = item.getList(); 

       mEditMode = true; 

       Intent i = new Intent(conext, AddTaskActivity.class); 

       i.putExtra("taskId", id); 
       i.putExtra("taskTitle", title); 
       i.putExtra("taskPriority", priority); 
       i.putExtra("taskAlertTime", alertTime); 
       i.putExtra("taskAlertDate", alertDate); 
       i.putExtra("taskDueDate", dueDate); 
       i.putExtra("taskDueTime", dueTime); 
       i.putExtra("taskListId", listId); 
       i.putExtra("EditMode", mEditMode); 
       i.putExtra("AlertId",_mId); 

       conext.startActivity(i); 

      } 
     }); 


     mItemManger.bindView(itemViewHolder.itemView, i); 

    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup,int position) { 

      View itemView = LayoutInflater. 
        from(viewGroup.getContext()). 
        inflate(R.layout.card_layout, viewGroup, false); 
      return new ItemViewHolder(itemView); 

    } 



     @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 


    public void remove(int position) { 
     Task item = items.get(position); 
     if (itemsPendingRemoval.contains(item)) { 
      itemsPendingRemoval.remove(item); 
     } 
     if (items.contains(item)) { 
      items.remove(position); 
      notifyItemRemoved(position); 
     } 
    } 

    public void cancelNotification() 
    { 
     AlarmManager alarmManager = (AlarmManager)conext.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(conext, NotificationReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(conext,_mId, intent, 0); 
     alarmManager.cancel(pendingIntent); 
    } 
    @Override 
    public int getSwipeLayoutResourceId(int position) { 
     return R.id.swipe; 
    } 
} 

Kann mir jemand bitte helfen? Vielen Dank ..

Antwort

0

Sie können "Abschnitte" zu Ihrer Recycleransicht mit der Bibliothek SectionedRecyclerViewAdapter hinzufügen.

class TaskSection extends StatelessSection { 

    String title; 
    List<Task> list; 

    public TaskSection(String title, List<Task> list) { 
     // call constructor with layout resources for this Section header, footer and items 
     super(R.layout.section_header, R.layout.section_item); 

     this.title = title; 
     this.list = list; 
    } 

    @Override 
    public int getContentItemsTotal() { 
     return list.size(); // number of items of this section 
    } 

    public int addTask(Task task) { 
     return list.add(task; 
    } 

    public int removeTask(Task task) { 
     return list.remove(task; 
    } 

    @Override 
    public RecyclerView.ViewHolder getItemViewHolder(View view) { 
     // return a custom instance of ViewHolder for the items of this section 
     return new MyItemViewHolder(view); 
    } 

    @Override 
    public void onBindItemViewHolder(RecyclerView.ViewHolder holder, int position) { 
     MyItemViewHolder itemHolder = (MyItemViewHolder) holder; 

     // bind your view here 
     itemHolder.tvItem.setText(list.get(position).getTitle()); 
    } 

    @Override 
    public RecyclerView.ViewHolder getHeaderViewHolder(View view) { 
     return new SimpleHeaderViewHolder(view); 
    } 

    @Override 
    public void onBindHeaderViewHolder(RecyclerView.ViewHolder holder) { 
     MyHeaderViewHolder headerHolder = (MyHeaderViewHolder) holder; 

     // bind your header view here 
     headerHolder.tvItem.setText(title); 
    } 
} 

Dann richten Sie das RecyclerView mit den Abschnitten:

// Create an instance of SectionedRecyclerViewAdapter 
SectionedRecyclerViewAdapter sectionAdapter = new SectionedRecyclerViewAdapter(); 

// Create your sections with the list of data 
TaskSection compSection = new TaskSection("Completed", compList); 
TaskSection pendSection = new TaskSection("Pending", pendList); 

// Add your Sections to the adapter 
sectionAdapter.addSection(compSection); 
sectionAdapter.addSection(pendSection); 

// Set up your RecyclerView with the SectionedRecyclerViewAdapter 
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
recyclerView.setAdapter(sectionAdapter); 

Nun, wenn Sie eine Aufgabe senden wollen von „Pending“

zunächst eine Section-Klasse Gruppe Ihre Aufgaben erstellen Abschnitt "Abgeschlossen":

pendSection.removeTask(task); 
compSection.addTask(task); 
sectionAdapter.notifyDataSetChanged(); 

In Bezug auf die SwipeLayout, nicht verlängern RecyclerSwipeAd erweitern Sie SectedRecyclerViewAdapter und implementieren Sie SwipeLayout in ItemViewHolder/onBindItemViewHolder, wie Sie es getan haben.

Verwandte Themen