2017-05-09 4 views
0

Wenn jemand wissen, in Recycler-Ansicht Adapter ausgewählte Elemente nur anzeigen, bedeutet das, dass ich nur ausgewählte Artikel und verbleibende Elemente anzeigen möchte ich entfernen oder verstecken.recyclerview adapter behalten ausgewählten Artikel und entfernen Sie alle Artikel außer ausgewählten in Android

public class MoviesAdapter extends RecyclerView.Adapter<MoviesAdapter.MyViewHolder> { 

    private List<Movie> moviesList; 
    // Start with first item selected 
    private int selectedItem = 0; 
    int selectedPosition=-1; 


    public class MyViewHolder extends RecyclerView.ViewHolder { 
    public TextView title, year, genre; 

    public MyViewHolder(View view) { 
     super(view); 
     title = (TextView) view.findViewById(R.id.title); 
     genre = (TextView) view.findViewById(R.id.genre); 
     year = (TextView) view.findViewById(R.id.year); 


    public MoviesAdapter(List<Movie> moviesList) { 
     this.moviesList = moviesList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.movie_list_row, parent, false); 

     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     Movie movie = moviesList.get(position); 
     holder.title.setText(movie.getTitle()); 
     holder.genre.setText(movie.getGenre()); 
     holder.year.setText(movie.getYear()); 


     if(selectedPosition==position) 
      holder.itemView.setBackgroundColor(Color.parseColor("#50000000")); 
     else 
      holder.itemView.setBackgroundColor(Color.parseColor("#ffffff")); 


     holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      selectedPosition=position; 
      notifyItemRangeRemoved(position,moviesList); 

     } 
    }); 
    } 
    @Override 
    public int getItemCount() { 
    return moviesList.size(); 
    } 
} 
+0

[Was haben Sie versucht?] (Https://stackoverflow.com/help/mcve) – Denny

+0

Ich habe versucht, wenn Benutzer ein Element ausgewählt, das in der aktuellen Recycling-Ansicht bleibt. dann gehen Sie weiter, um so zu kaufen –

+0

Bitte geben Sie Details über Ihren Ansatz und Code-Schnipsel für bessere Antworten. Sie können andere Elemente aus Ihrer Liste entfernen und den Adapter benachrichtigen. notifyDataSetChanged. – VishnuSP

Antwort

0

eine boolean Variable in Movie-Klasse hinzufügen:

 class Movie{ 
      private boolean isSelected =false; 

      public boolean isSelected() { 
       return isSelected; 
      } 

      public void setSelected(boolean selected) { 
       isSelected = selected; 
      } 
     } 

Zunächst diese Variable wird falsch onClick machen es wahr:

 holder.itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        movie.setSelected(true); 
        removeUnSelectedItem(); 
       } 
      }); 

     private void removeUnSelectedItem(){ 
        List<Movie> temMovieList = new ArrayList<>(); 
        for (Movie movie:moviesList){ 
         if(movie.isSelected()){ 
          temMovieList.add(movie); 
         } 
        } 

        moviesList.clear(); 
        moviesList.addAll(temMovieList); 
        notifyDataSetChanged(); 
       } 

es werden alle nicht ausgewählten oder entfernen Sie Elemente un-Klick & werden nur angeklickte Elemente angezeigt.

+0

Dank Vivek Mahajan. Es ist wirklich hilfreich für mich. Es funktioniert super. –

0

implementiert diese Schnittstelle in Ihre Tätigkeit wie folgt aus:

ItemClickSupport.addTo (YourRecycleViewObject) .setOnClickListener (this);

Nachdem Sie die onItemClick-Methode in Ihrer Aktivität erhalten und die ausgewählte Position erhalten haben, erhalten Sie mit dieser Position ein Objekt aus Ihrer Liste und erstellen eine neue Liste mit diesem Objekt und setzen einen neuen Adapter mit einer anderen Liste.

package com.firebasechat.syscraft.firebasechat.Utils; 

import android.support.v7.widget.RecyclerView; 
import android.view.View; 

import com.firebasechat.syscraft.firebasechat.R; 


public class ItemClickSupport { 
    private final RecyclerView mRecyclerView; 
    private OnItemClickListener mOnItemClickListener; 
    private OnItemLongClickListener mOnItemLongClickListener; 
    private View.OnClickListener mOnClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mOnItemClickListener != null) { 
       RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); 
       mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v); 
      } 
     } 
    }; 
    private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      if (mOnItemLongClickListener != null) { 
       RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); 
       return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v); 
      } 
      return false; 
     } 
    }; 
    private RecyclerView.OnChildAttachStateChangeListener mAttachListener 
      = new RecyclerView.OnChildAttachStateChangeListener() { 
     @Override 
     public void onChildViewAttachedToWindow(View view) { 
      if (mOnItemClickListener != null) { 
       view.setOnClickListener(mOnClickListener); 
      } 
      if (mOnItemLongClickListener != null) { 
       view.setOnLongClickListener(mOnLongClickListener); 
      } 
     } 

     @Override 
     public void onChildViewDetachedFromWindow(View view) { 

     } 
    }; 

    private ItemClickSupport(RecyclerView recyclerView) { 
     mRecyclerView = recyclerView; 
     mRecyclerView.setTag(R.id.item_click_support, this); 
     mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener); 
    } 

    public static ItemClickSupport addTo(RecyclerView view) { 
     ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); 
     if (support == null) { 
      support = new ItemClickSupport(view); 
     } 
     return support; 
    } 

    public static ItemClickSupport removeFrom(RecyclerView view) { 
     ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); 
     if (support != null) { 
      support.detach(view); 
     } 
     return support; 
    } 

    public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) { 
     mOnItemClickListener = listener; 
     return this; 
    } 

    public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) { 
     mOnItemLongClickListener = listener; 
     return this; 
    } 

    private void detach(RecyclerView view) { 
     view.removeOnChildAttachStateChangeListener(mAttachListener); 
     view.setTag(R.id.item_click_support, null); 
    } 

    public interface OnItemClickListener { 

     void onItemClicked(RecyclerView recyclerView, int position, View v); 
    } 

    public interface OnItemLongClickListener { 

     boolean onItemLongClicked(RecyclerView recyclerView, int position, View v); 
    } 
} 
Verwandte Themen