【问题标题】:ImageView onClick need to click twice to perform an actionImageView onClick 需要点击两次才能执行一个动作
【发布时间】:2018-02-20 13:59:29
【问题描述】:

我在我的应用程序中设置了CardView。卡片上有ImageView。我在ImageView 上设置了onClickListener。但是在单击两次ImageView 后执行操作。
这是CardView的代码:

<LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
            <ImageView
                android:id="@+id/assign"
                android:layout_margin="7dp"
                android:padding="15dp"
                android:layout_width="70dp"
                android:background="@drawable/circle"
                android:layout_height="70dp"
                android:src="@drawable/assign" />
                <TextView
                    android:text="Assign Table"
                    android:focusableInTouchMode="true"
                    android:id="@+id/textAssignTable"
                    android:layout_gravity="center"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </LinearLayout>
        </LinearLayout>

        <ImageView
            android:layout_marginTop="70dp"
            android:layout_gravity="center"
            android:id="@+id/clear"
            android:src="@drawable/clear"
            android:layout_width="25dp"
            android:layout_height="25dp" />
    </LinearLayout>  

这是为ImageView设置OnCLickListener的代码。

assign.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String tag = "";
                    fm = getFragmentManager();
                    tx = fm.beginTransaction();
                    AssignTable table=new AssignTable();
                    tx.replace(R.id.frame, table, tag);
                    //tx.addToBackStack(tag);
                    tx.commit();
                }
            });
            clear.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String tag = "";
                    fm = getFragmentManager();
                    fm.popBackStack();
                    tx = fm.beginTransaction();
                    tx.replace(R.id.frame, chooseTab, tag);
                    //tx.addToBackStack(tag);
                    tx.commit();
                }
            });  

这是OnClickListener 的代码SwipeCardOnClick

  @Override
            public void onItemClick(View view, int i)
            {
                clear=(ImageView)view.findViewById(R.id.clear);
                phone=(TextView)view.findViewById(R.id.phone);
                assignTable=(ImageView)view.findViewById(R.id.assignTable);
                textAssignTable=(TextView)view.findViewById(R.id.textAssignTable);
                textAssignTable.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String tag = "";
                        fm = getFragmentManager();
                        tx = fm.beginTransaction();
                        AssignTable table=new AssignTable();
                        tx.replace(R.id.frame, table, tag);
                        //tx.addToBackStack(tag);
                        tx.commit();
                    }
                });
                assignTable.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String tag = "";
                        fm = getFragmentManager();
                        tx = fm.beginTransaction();
                        AssignTable table=new AssignTable();
                        tx.replace(R.id.frame, table, tag);
                        //tx.addToBackStack(tag);
                        tx.commit();
                    }
                });
                clear.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        String tag = "";
                        fm = getFragmentManager();
                        fm.popBackStack();
                        tx = fm.beginTransaction();
                        tx.replace(R.id.frame, chooseTab, tag);
                        //tx.addToBackStack(tag);
                        tx.commit();
                    }
                });

【问题讨论】:

  • 这是在物理设备还是模拟器上?
  • 物理设备
  • 是否清晰并指定为矢量可绘制图像?
  • 没有。我取自 Drawables
  • 试过这个吗?将 android:clickable="true" android:focusable="true" 设置为 Imageview 并将 android:clickable="false" android:focusable="false" 设置为 CardView

标签: android imageview onclicklistener cardview


【解决方案1】:

我建议你删除 android:focusableInTouchMode="true" 或者让它为假。

这似乎消耗了第一次点击,所以没有将它传递给点击监听器。 然后第二次单击成功,因为现在获得了焦点。 另一个选项是将 RequestFocus 设置为 true,然后设置焦点,这样就不会消耗第一次点击。 我在尝试使用 android:focusableInTouchMode="true" 保持按钮选择历史时遇到了类似的问题。 RequestFocus() 然后消除了第一次点击消耗问题。

我希望这是有道理的。

【讨论】:

  • 谢谢,确实有效:)
猜你喜欢
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 2011-03-15
  • 2020-12-07
相关资源
最近更新 更多