如何处理片段和活动中的后压

Posted

技术标签:

【中文标题】如何处理片段和活动中的后压【英文标题】:how to handle back press in fragments and activity 【发布时间】:2016-11-25 21:23:53 【问题描述】:

我有标签片段,其中包含 3 个片段:片段 A 片段 B 片段 c。 1)现在点击片段中的项目A活动打开。在这种情况下如何处理后按和后退按钮。

2) 现在点击来自片段 C 活动的项目会打开,其中包含 3 个选项卡,其中包含片段 X 片段 y 片段 z 。在这种情况下如何处理后按和后退按钮。

谁能帮帮我???

【问题讨论】:

在片段中 getActivity().onBackPressed(); 【参考方案1】:

将此代码用于默认后退按钮:

@Override
    public void onBackPressed() 
            super.onBackPressed();
            this.finish();
    

对于后退图像按钮,只需在 onClickListener(); 中使用 finish()

Button backButton = (Button)this.findViewById(R.id.back);
backButton.setOnClickListener(new OnClickListener() 
  @Override
  public void onClick(View v) 
    finish();
  
);

如果之前的 Activity 已经关闭,则使用 Intent 进行导航:

 Button backButton = (Button)this.findViewById(R.id.back);
    backButton.setOnClickListener(new OnClickListener() 
      @Override
      public void onClick(View v) 

       Intent i = new Intent(currentActivity.this, previousActivity.class);     
       startActivity(i);
       finish(); 

      
    );

【讨论】:

我用图像按钮尝试了第二种解决方案,但它直接关闭了应用程序:( 你在哪里应用了这个?? 我有一个片段,其中包含在单击项目活动时打开的recycleview,所以现在在后面按我想从当前活动回到片段我该怎么做?? 我用过intent,但后压不顺畅 检查可能是其他视图需要时间来加载,但如果你想从一个活动移动到另一个活动,你必须使用意图【参考方案2】:

首先在加载片段的活动上创建方法。例如,我在活动 NavigationDrawer.class

上加载片段
public Fragment getVisibleFragment()
    FragmentManager fragmentManager = NavigationDrawer.this.getSupportFragmentManager();
    List<Fragment> fragments = fragmentManager.getFragments();
    if(fragments != null)
        for(Fragment fragment : fragments)
            if(fragment != null && fragment.isVisible())
                return fragment;
        
    
    return null;

然后,调用方法

@Override
public void onBackPressed() 

       //call the method
    if (getVisibleFragment()!=null) 

        //check which current visible fragment
        String nameFragment = getVisibleFragment().toString();
        if (nameFragment.contains("nameFragmentA")) 
            //your action A
         else if(nameFragment.contains("nameFragmentB"))
            //your action B
         else
           //another action
         

       

它可以适用于问题 1 和 2。希望这对你有帮助!

【讨论】:

以上是关于如何处理片段和活动中的后压的主要内容,如果未能解决你的问题,请参考以下文章

使用选项卡活动和片段时如何处理后按

如何处理单个活动的多个片段

Jetpack Compose 和 Compose Navigation 如何处理 Android 活动?

如何处理地图碎片按钮?

如何处理片段中的onClick [重复]

如何处理jmeter中的记录问题? (即)Smack 插件活动未在 JMeter 中记录