2017-01-02 133 views
2

在這方面,我已經添加SetoNclicklistener爲recyclerview本身,而是當我點擊回收站視圖沒有被觸發..please幫助觸摸事件(onClickListener)不觸發recyclerView

主要活動

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    recyclerView = (RecyclerView) findViewById(R.id.view); 





    getOverflowMenu(); 

    android.support.v4.app.LoaderManager loaderManager = getSupportLoaderManager(); 
    android.support.v4.content.Loader<Cursor> loader=loaderManager.getLoader(loader_id); 
    if(loader!=null) { 
     loaderManager.initLoader(loader_id, null, this); 
    } 
    else 
    { 
     loaderManager.restartLoader(loader_id,null,this); 
    } 
recyclerView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(getApplicationContext(),"touched",Toast.LENGTH_SHORT).show();; 
    } 
}); 


} 

回收站適配器 `公共類RecycleAdapter擴展RecyclerView.Adapter {

private int total_items=0; 
private Context context; 
private Cursor lcursor; 



public RecycleAdapter(Context mcontext,Cursor cursor) { 
    context=mcontext; 
    lcursor=cursor; 

} 

@Override 
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view= LayoutInflater.from(context).inflate(R.layout.item_view, parent, false); 
    RecyclerViewHolder recyclerViewHolder=new RecyclerViewHolder((view)); 


    return recyclerViewHolder; 


} 

@Override 
public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
    if(!lcursor.moveToPosition(position)) { 

     return; 
    } 
    String todo=(lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO_NAME)))+" "+ 
      (lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO))); 
    String time=lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO_TIME)); 
    holder.item_desc.setText(todo); 
    holder.item_date.setText(time); 
    holder.itemView.setTag(lcursor.getColumnIndex(DatabaseContract.Column._ID)); 




} 



@Override 
public int getItemCount() { 
    return lcursor.getCount(); 
} 


public class RecyclerViewHolder extends RecyclerView.ViewHolder 
{ 

    private TextView item_desc,item_date; 
    public RecyclerViewHolder(View itemView) { 
     super(itemView); 
     item_desc=(TextView)itemView.findViewById(R.id.item_desc); 
     item_date=(TextView)itemView.findViewById(R.id.item_date); 
    } 






} 


} 
+2

W你想實施的帽子? –

+0

您正在點擊recycelrview中的項目而不是recyclerView,請爲項目設置'onClickListener()'。 –

+0

爲什麼要爲整個視圖設置OnClickListener?大多數應用程序會在RecyclerView中爲單個視圖設置偵聽器。 –

回答

1
@Override 
    public void onBindViewHolder(RecyclerViewHolder holder, int position) { 
    if(!lcursor.moveToPosition(position)) { 

    return; 
} 
String todo=(lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO_NAME)))+" "+ 
     (lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO))); 
String time=lcursor.getString(lcursor.getColumnIndex(DatabaseContract.Column.COLUMN_TODO_TIME)); 
holder.item_desc.setText(todo); 
holder.item_date.setText(time); 
    holder.itemView.setTag(lcursor.getColumnIndex(DatabaseContract.Column._ID)); 

holder.itemView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // here you can perform any operation on perticuler view 
    } 
} 
} 

你會得到的視圖位置

+0

Thanks.works喜歡魅力..但它似乎是一個監聽器被添加到視圖中的每個項目,如果我有1000個項目在列表中,1000個監聽器將被實施, .is還有另一種方式 –

+0

Recyclerview具有延遲加載功能以及它只會創建監聽器的引用,所以您可以添加N個編號,這不會影響您的性能。 –

+1

@IniyanV如果它有助於接受答案 – rookieDeveloper

0

試試這個:

使用自定義RecyclerItemClickListener獲得click事件

recyclerView.addOnItemTouchListener(
      new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() { 
       @Override 
       public void onItemClick(View view, int position) { 
        // TODO Handle item click 
        Toast.makeText(getApplicationContext(), (position).toString(), Toast.LENGTH_LONG).show(); 
        Toast.makeText(getApplicationContext(),"touched",Toast.LENGTH_SHORT).show();; 

       } 
      }) 
    ); 

現在定義類,如:

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 
    GestureDetector mGestureDetector; 
    private OnItemClickListener mListener; 

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) { 
     mListener = listener; 
     mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onSingleTapUp(MotionEvent e) { 
       return true; 
      } 
     }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
     View childView = view.findChildViewUnder(e.getX(), e.getY()); 
     if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
      mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
     } 
     return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { 
    } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

    } 

    public interface OnItemClickListener { 
     public void onItemClick(View view, int position); 
    } 
} 

詳情看到這個鏈接:http://sapandiwakar.in/recycler-view-item-click-handler/

+0

在下面的代碼中有一個錯誤:參數期望android.widget.Adapterview <>但提供了一個視圖 –

+0

在哪一行......? – rafsanahmad007