Android 根据侦听器的片段可见性自动禁用/启用侦听器

Android 根据侦听器的片段可见性自动禁用/启用侦听器,android,android-fragments,listener,android-fragmentactivity,onitemclicklistener,Android,Android Fragments,Listener,Android Fragmentactivity,Onitemclicklistener,在Android应用程序中,我有两个片段: 带有项目列表视图的片段 带有图像视图的片段 通过callback onListItemSelected,当用户单击ListView项时,MainActivity将ImageView推送到堆栈上,带有图像的片段显示在屏幕上。在这一点上,我希望,由于ListView片段不再可见,因此与此片段关联的任何事件都不再触发。事实并非如此。如果我触摸ImageView,ListView项的侦听器仍会启动 两个问题: 是否有一种方法可以根据片段可见性自动启用/禁用侦听

在Android应用程序中,我有两个片段:

  • 带有项目列表视图的片段

  • 带有图像视图的片段

  • 通过callback onListItemSelected,当用户单击ListView项时,MainActivity将ImageView推送到堆栈上,带有图像的片段显示在屏幕上。在这一点上,我希望,由于ListView片段不再可见,因此与此片段关联的任何事件都不再触发。事实并非如此。如果我触摸ImageView,ListView项的侦听器仍会启动

    两个问题:

  • 是否有一种方法可以根据片段可见性自动启用/禁用侦听器

  • 如果没有,我想应该禁用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);
    
           }
    
    你可以尝试两件事

  • 将ImageView设置为使用触摸事件

    ImageView.setClickable(true);

  • 按下新片段时,在ListView上禁用触摸事件

    ListView.setClickable(false);


  • 如果您想知道如何知道何时删除带有ImageView的片段,请尝试setTargetFragment。请查看此处:

    我决定使用第一种解决方案,因为我没有设法使第二种解决方案正常工作。ImageView现在无法单击。但是,我注意到一些奇怪的情况。如果我用多个手指点击ImageView,有时会显示此信息出现在LogCat中:“在UnsetPressedState之前停止操作。调用mUnsetPressedState.run()”。但它似乎不会产生任何问题。