触摸事件(onClickListener)不触发recyclerView
在这方面,我已经添加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);
}
}
}
@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
}
}
}
你会得到的视图位置
Thanks.works喜欢魅力..但它似乎是一个监听器被添加到视图中的每个项目,如果我有1000个项目在列表中,1000个监听器将被实施, .is还有另一种方式 –
Recyclerview具有延迟加载功能以及它只会创建监听器的引用,所以您可以添加N个编号,这不会影响您的性能。 –
@IniyanV如果它有助于接受答案 – rookieDeveloper
试试这个:
使用自定义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/
在下面的代码中有一个错误:参数期望android.widget.Adapterview 但提供了一个视图 –
在哪一行......? – rafsanahmad007
W你想实施的帽子? –
您正在点击recycelrview中的项目而不是recyclerView,请为项目设置'onClickListener()'。 –
为什么要为整个视图设置OnClickListener?大多数应用程序会在RecyclerView中为单个视图设置侦听器。 –