2016-03-08 141 views
1

有關於如何做一個簡單的RecyclerView Click事件處理程序,但我不能找到這個基本期望的功能幫助各種材料。我想使之成爲選擇(怎麼看我改變高度和顏色,使其看起來選中),以便能夠long tap上的項目。然後,如果在我的Fragment我想基於一個Toolbar刪除按鈕點擊例如RecyclerView刪除一個項目,我將如何做,如果谷歌認爲,我們不應該保持位置的情況下從適配器在課外。RecyclerView項目選擇以及如何禁用觸摸事件

我從23.2.0支持庫實現了一個BottomSheet,看來我上面的RecyclerView但點擊經歷,它就像我控制RecyclerView本身,而是我也有在上面BottomSheet。我怎樣才能'禁用'它?

我試過:使用interface,設置clickable=true頂部佈局視圖。

RecyclerAdapter

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.EventViewHolder> { 
private List<Event> eventsList; 
private int selected_position = -1; 
private RecyclerView recyclerView; 



Typeface font; 
Typeface fontBold; 

public RecyclerAdapter(List<Event> eventsList, RecyclerView recyclerView) { 
    this.eventsList = eventsList; 
    this.recyclerView = recyclerView; 
} 

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

    font = Typeface.createFromAsset(itemView.getContext().getAssets(), "ubuntu-l.ttf"); 
    fontBold = Typeface.createFromAsset(itemView.getContext().getAssets(), "ubuntu-b.ttf"); 

    return new EventViewHolder(itemView); 
} 


@Override 
public void onBindViewHolder(RecyclerAdapter.EventViewHolder eventViewHolder,final int position) { 


    if(selected_position == position){ 
     // Here I am just highlighting the background 
     eventViewHolder.cardView.setCardBackgroundColor(ContextCompat.getColor(MyApplication.getAppContext(), R.color.tealfifty)); 
     if (Build.VERSION.SDK_INT >= 21) { 
      eventViewHolder.itemView.setElevation(10f); 
      eventViewHolder.itemView.setTranslationZ(10f); 
     } 
    }else{ 
     if (Build.VERSION.SDK_INT >= 21) { 
      eventViewHolder.itemView.setElevation(2f); 
      eventViewHolder.itemView.setTranslationZ(2f); 
     } 
     eventViewHolder.cardView.setCardBackgroundColor(ContextCompat.getColor(MyApplication.getAppContext(), R.color.white)); 
    } 

    eventViewHolder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      RecyclerView.LayoutManager lm = recyclerView.getLayoutManager(); 

      // Updating old as well as new positions 
      notifyItemChanged(selected_position); 
      selected_position = position; 
      notifyItemChanged(selected_position); 
      lm.scrollToPosition(selected_position); 
     } 
    }); 

    Event event = eventsList.get(position); 
    eventViewHolder.itemView.setTag(R.integer.EVENT_OBJECT_TAG, event); 
.... 

回答

2

試試這個。

mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      return true; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 

     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 
    }); 

我在onInterceptTouchEvent返回true,在觸摸項目回收器視圖後無效。

相關問題