繁体   English   中英

Android中的Recycler View不能点击

[英]Recycler View in Android not Clicking

我正在开发一个Android应用程序。 在“回收者视图”中单击某个项目时,我在打开弹出菜单时遇到一些问题。

Show.java(包含“回收者视图”的活动)。 mRecycler是与RecyclerView关联的对象。

mRecycler.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecycler, new RecyclerViewClickListener() {
        @Override
        public void onClick(View view, final int position) {
            PopupMenu menu = new PopupMenu(Show.this,mRecycler);
            MenuItem itemView = (MenuItem) findViewById(R.id.three);
            if(method.equals("Completed"))
                itemView.setTitle("Mark as imcomplete");
            menu.getMenuInflater().inflate(R.menu.menu_popup,menu.getMenu());

            menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
                public boolean onMenuItemClick(MenuItem item){
                    int id=item.getItemId();
                    switch (id){
                        case R.id.one:
                            Intent intent = new Intent(Show.this,Add.class);
                            intent.putExtra("Task",tasks.get(position));
                            startActivity(intent);
                            finish();
                            startActivity(getIntent());
                            break;
                        case R.id.two:
                            deleteRecord(position);
                            break;
                        case R.id.three:
                            toggleComplete(position);
                    }
                    return true;
                }
            });

        }

        @Override
        public void onLongClick(View view, int position) {
            onClick(view,position);
        }
    }));

RecyclerView的xml的代码片段

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:scrollbars="vertical"
        android:clickable="true"
        android:contextClickable="true"
        android:longClickable="true" />

RecyclerViewClickListener.java

public interface RecyclerViewClickListener {
    void onClick(View view,int position);
    void onLongClick(View view,int position);
}

RecyclerTouchListener.java-实现OnItemTouchListener的类

public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{
    private GestureDetector gestureDetector;
    private RecyclerViewClickListener clickListener;

    public RecyclerTouchListener (Context context,final RecyclerView recyclerView,
                                  final RecyclerViewClickListener clickListener){
        this.clickListener = clickListener;
        gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onSingleTapUp(MotionEvent e){
                return  true;
            }

            @Override
            public void onLongPress(MotionEvent e){
                View child = recyclerView.findChildViewUnder(e.getX(),e.getY());
                if (child != null && clickListener!=null)
                    clickListener.onLongClick(child,recyclerView.getChildAdapterPosition(child));
            }

        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e){
        View child = rv.findChildViewUnder(e.getX(),e.getY());
        if (child !=null && clickListener !=null && gestureDetector.onTouchEvent(e))
            clickListener.onClick(child,rv.getChildAdapterPosition(child));
        return false;
    }

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

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntecept){}
}

当我单击RecyclerView上的任何项目时,没有任何反应。 android系统甚至不承认它已被单击。 请检查我的代码有什么问题。

你可以试试这个吗

mRecyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), mRecyclerView, new ClickListener() {
            @Override
            public void onClick(View view, int position) {
                menuCardIndex = position;
                PopupMenu popupMenu = new PopupMenu(Show.this, view);
                popupMenu.setOnMenuItemClickListener(Show.this);
                popupMenu.inflate(R.menu.menu_popup);
                popupMenu.show();
            }

            @Override
            public void onLongClick(View view, int position) {
            }
        }));

@Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.one:
            Your_First_Operation;
            return true;
        case R.id.two:
            Your_Second_Operation;
            return true
        case R.id.three:
            Your_Third_Operation;
            return true
    }
    return false;
}

最后把这个放在你的活动上

public class Show extends AppCompactActivity implements PopupMenu.OnMenuItemClickListener 

希望通过这种方式,您可以收听点击监听器。 如果工作正常,则可以设置逻辑。

如果您的RecyclerView项目在其XML文件中具有“可点击的”子级,请尝试声明属性:

android:clickable="false"

仅在列表项的项上保留clickable为true

如果不是您这种情况,或者您绝对需要列表项中的可点击元素,那么还有另一种解决方案。


如果您使用的是RecyclerView,则应在代码中的某个地方实现RecyclerView适配器。

OnBindViewHolder方法中,尝试以下代码:

@Override
public void onBindViewHolder(final ViewHolder holder, int position) {

  //YOUR CODE ...

  holder.itemView.setOnTouchListener(yourOnTouchListener);

  //MORE CODE ...
}

这将在生成列表时将OnTouchListener设置为单个ItemView。

我希望我的回答是有帮助的并且可以理解的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM