【问题标题】:Floating Action Button does not raise OnClick event浮动操作按钮不会引发 OnClick 事件
【发布时间】:2015-10-17 18:00:48
【问题描述】:

我有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/rlMap">
    <org.mapsforge.map.android.view.MapView
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"/>
    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/windArrow"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_gravity="top|right|end"
        android:src="@drawable/arrow"
        android:layout_alignStart="@+id/fab" />
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right|end"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="@drawable/settings"
        android:clickable="true"/>
</RelativeLayout>

以及 OnCreate 方法中的如下代码:

...
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d(TAG,"FAB Setting Clicked");
            Intent i = new Intent(getApplicationContext(), AppPreferences.class);
            startActivity(i);
        }
    });
...

但是当我按下按钮时没有任何反应,意图没有运行,日志也没有写入。

按钮动画正在工作,每次我按下按钮时都会出现以下日志消息:

D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN

所以似乎有一些反应。

我做错了什么?

【问题讨论】:

  • 你在哪里设置点击监听?在ActivityFragment 内?您可以验证侦听器是否设置为按钮?您可以在fab.setOnClickListener之前/之后调试或打印日志
  • 监听器被设置在一个最终派生自 Activity 的类中。正在设置监听器,我在前后使用 fab.hasOnClickListeners() 的日志调试进行了检查。
  • 您可以在 xml 中添加一个点击事件,例如 -- (android:onClick="runThis") -- 然后在 Activity 中添加 -- (public void runThis(View v) { .. ... }) .试试这个方法,看看它是否有效
  • @Tasos 成功了!我的问题是为什么?
  • 我不知道。也许它是您放置听众的地方。在 onCreate 里面试试——如果你在 onCreate 里面有它,在外面试试

标签: android floating-action-button


【解决方案1】:

试试这个:

fab.bringToFront();

应该有帮助。

【讨论】:

    【解决方案2】:

    @Tasos 建议的解决方案奏效了:

    在 xml 中添加一个点击事件,例如

    android:onClick="runThis"
    

    然后在Activity中添加

    public void runThis(View v) { ..... }
    

    【讨论】:

    • 同样的问题,我也对它为什么不起作用感兴趣。
    【解决方案3】:

    当我未能返回 View 对象时,我遇到了同样的问题,而是像这样再次调用 infalter.inflate:

    View rootView = inflater.inflate(R.layout.fragment_main, container, false);
    /* setup onClick handler */
    return inflater.inflate(R.layout.fragment_main, container, false);
    

    修复是用

    替换返回
    return rootView;
    

    【讨论】:

      【解决方案4】:

      其实我找到了以下解决点击丢失的解决方案

      public class MainActivity extends AppCompatActivity implements View.OnClickListener 
      {
          @Override
              public void onClick(View v) {
                  Log.v(LOG_HEADER,"onClick");       
              }
      }
      
      public class SearchFragment extends Fragment
      {
          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
          {
              LinearLayout ll = (LinearLayout )inflater.inflate(R.layout.fragment_search, container, false);
              ll.setOnClickListener((MainActivity)getActivity());
              return ll;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 2020-08-10
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多