2016-08-07 27 views
0

Ich kann Eigenschaften des ausgewählten Elements in RecyclerView ändern, aber ich möchte die Auswahl für ältere Auswahlen entfernen.So implementieren Sie die Einzelauswahl in RecyclerView?

Hier ist, wie ich RecyclerView erstellen:

fragmentViewPagerAdapter.addFragmentView((arg1, arg2, arg3) -> { 
     View view = arg1.inflate(R.layout.recyclerview_layout, arg2, false); 
     RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
     selectDateRecyclerViewAdapter = new SelectDateRecyclerViewAdapter(dayList,this,(v,position) -> 
     { 
      AppCompatButton appCompatButton = (AppCompatButton)v.findViewById(R.id.selectHourButton); 
      AppCompatImageView appCompatImageView = (AppCompatImageView)v.findViewById(R.id.calendarDot); 
      highlightButton(appCompatButton,appCompatImageView); 
     }); 
     recyclerView.setHasFixedSize(false); 
     recyclerView.addItemDecoration(selectDateRecyclerViewAdapter. new CalendarItemDecoration(10,dayList.size())); 
     GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(),4,GridLayoutManager.VERTICAL,false); 
     recyclerView.setLayoutManager(gridLayoutManager); 
     recyclerView.setAdapter(selectDateRecyclerViewAdapter); 
     selectDateRecyclerViewAdapter.notifyDataSetChanged(); 
     return view; 
    }); 

highlightButton Methode ändert Hintergrund der Knopf usw.

Dank.

Antwort

0

Möglicherweise müssen Sie die Markierungen halten, um aufzuzeichnen, welche Schaltflächen ausgewählt sind. Wenn Sie ein neues Element auswählen, löschen Sie zuerst die Kennzeichen und setzen Sie es auf die Position des neu ausgewählten Elements zurück. Dann notifyDataSetChanged() oder notifyItemChanged() .done.

Der Hauptcode dieser Funktion kann in highlightButton Methode platziert werden. Es ist also besser, wenn Sie den Code highlightButton eingeben.

0

Da es sich um eine einzelne Auswahl handelt, können Sie die ausgewählte Position mit einer externen Variablen verfolgen, z. B. int selectedIndex;

In Ihrem Adapter Code:

public class ViewHolder extends RecyclerView.ViewHolder { 

       View itemView;   
       public ViewHolder(View v) { 
        super(v); 
        itemView = v; 
        v.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          selectedPostion = getAdapterPosition(); 
          if(selectedPosition == RecyclerView.NO_POSITION) return; 
          recyclerViewOnItemClickListener.onItemSelect(itemView, getAdapterPosition()); //Custom listener - in turn calls your highlightButton method 

          //call notifyDataSetChanged(); or notifyItemRangeChanged(); 
          } 
        }); 
       } 
      } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 

      holder.itemView.setSelected(position == selectedPostion); 
    } 
Verwandte Themen