2017-01-02 134 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