2017-05-09 78 views
0

如果有人知道如何顯示在回收站視圖適配器選定的項目只意味着我需要只顯示選定的項目和我想要刪除或隱藏的剩餘項目。Recyclerview適配器只保留選定的項目,並刪除除了在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

[你有什麼嘗試?](https://stackoverflow.com/help/mcve) – Denny

+0

我試過當用戶選擇一個項目,仍然在當前的回收視圖。然後繼續購買這樣的產品 –

+0

請提供有關您的方法和代碼片段的詳細信息,以獲得更好的答案。 您可以從列表中刪除其他項目並使用通知適配器。 notifyDataSetChanged。 – VishnuSP

回答

0

在電影類添加一個布爾變量:

 class Movie{ 
      private boolean isSelected =false; 

      public boolean isSelected() { 
       return isSelected; 
      } 

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

最初,這個變量將是假的onClick它是真的:

 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(); 
       } 

它會刪除所有未選擇或取消單擊項目&它只會顯示點擊的項目。

+0

謝謝vivek mahajan。它真的對我很有幫助,它的工作很棒。 –

0

實現了這個接口爲您的活動是這樣的:

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

在您的活動中獲取onItemClick方法並獲取選定位置後,使用此位置您可以從列表中獲取對象,並使用此對象創建新列表並使用另一個列表設置新適配器。

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); 
    } 
}