【问题标题】:Automatically disable/enable a listener based on its Fragment visibility根据片段可见性自动禁用/启用侦听器
【发布时间】:2013-09-07 08:05:10
【问题描述】:

在一个 Android 应用中,我有两个片段

  1. 带有 ListView 项的片段

  2. 带有 ImageView

  3. 的片段

通过回调onListItemSelected,当用户点击一个ListView项时,MainActivity将ImageView压入栈中,带有图片的fragment出现在屏幕上。在这一点上,我希望,由于 ListView 片段不再可见,与该片段关联的任何事件都不再被触发。不是这种情况。如果我触摸 ImageView,ListView 项的侦听器仍然会触发。

两个问题:

  1. 有没有办法根据片段的可见性自动启用/禁用侦听器?

  2. 如果没有,我想应该禁用 ListView 片段视图,然后在按下 backButton 时重新启用它。如何在 MainActivity 中捕获 backButton 事件以重新启用以前禁用的视图?

公共类 MainActivity 扩展 FragmentActivity 实现 ListViewFragment.Callbacks {

[...]

       public void onListItemSelected(String str) {


          FragmentManager fragmentManager = getSupportFragmentManager();
          FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();       

          fragmentTransaction.addToBackStack(null);
          fragmentTransaction.replace(R.id.listView, f);
          fragmentTransaction.commit();

          // disable listView 
          //View lw = getSupportFragmentManager().findFragmentById(R.id.listView).getView().findViewById(R.id.my_listView);
          //lw.setEnabled(false);

       }

【问题讨论】:

    标签: android android-fragments listener android-fragmentactivity onitemclicklistener


    【解决方案1】:

    你可以尝试两件事

    1. 将 ImageView 设置为使用触摸事件。

      ImageView.setClickable(true);

    2. 当推送新片段时禁用 ListView 上的触摸事件。

      ListView.setClickable(false);

    如果您想知道如何知道带有 ImageView 的片段何时被删除,请尝试 setTargetFragment。看这里:https://stackoverflow.com/a/13733914/935421

    【讨论】:

    • 我决定使用第一个解决方案,因为我没有设法使第二个解决方案工作。 ImageView 现在不可点击。然而,我注意到了一些奇怪的事情。如果我用多个手指点击 ImageView,有时此信息会出现在 LogCat 中:“在 UnsetPressedState 之前的 ACTION_DOWN。调用 mUnsetPressedState.run()”。不过,这似乎没有造成任何问题。
    猜你喜欢
    • 2013-05-11
    • 2013-12-01
    • 2015-07-03
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多