禁用片段中的反压?

时间:2017-04-20 05:42:52

标签: android android-fragments fragmenttransaction onbackpressed

我有一项活动主要活动,其中有两个片段 ListFragment DetailFragment 。当我在__Detail Fragment上时,我不想要按两次背压。

  

主要活动

 @Override
public void onBackPressed() {
    if (!isViewClicked) {
        isViewClicked = true;
        super.onBackPressed();
    }

这里我只想阻止两次按下后退按钮。 但这似乎不起作用。 这里通过阻止我的意思,一旦按下,从详细信息到列表。如果按了一个应用程序最小化,我不想发生。

5 个答案:

答案 0 :(得分:0)

如果您的DetailFragment中有Activity个实例,则可以使用该片段的isAdded()方法检查当前是否已将Activity添加到getSupportFragmentManager().findFragmentByTag(TAG);

为了找到片段的实例,您可以使用

getSupportFragmentManager().findFragmentById(ID);
  
import jenkins.model.Jenkins job = Jenkins.instance.getJob("freestyle-test") numbuilds = job.builds.size() if (numbuilds == 0) { return } lastbuild = job.builds[numbuilds - 1] println 'JOB: ' + job.fullName println ' -> lastbuild: ' + lastbuild.displayName + ' = ' + lastbuild.result println ' -> lastbuild someEnv: ' + build.environment.get("SOME_ENV")

答案 1 :(得分:0)

我没有准确地告诉你,但我正在给你我在我的项目中使用的技巧。我在你的代码中编辑它。我不知道什么是 isViewClicked 。但 请检查它是否对您有用。

@Override
    public void onBackPressed() {
        int count = this.getSupportFragmentManager().getBackStackEntryCount();
        if(count != 0)
        {
            //Do your stuff
        }else if (!isViewClicked) {
            isViewClicked = true;
            super.onBackPressed();
        }
    }

答案 2 :(得分:0)

只需将此添加到包含ListFragmentDetailedFragment的活动即可。从onBackPressed()移除ListFragment

@Override
public void onBackPressed() {

}

希望这有帮助。

答案 3 :(得分:0)

好的,我试着理解你的问题。根据我的理解

您有活动A - 列表片段>细节片段。

当你按下细节片段上的后退按钮时,你会回到列表片段,它是你需要的。 但是,从List Fragment再次按下后退按钮不应该关闭/退出您的应用程序。

所以这就是你需要做的。

将列表片段添加到 MainActivity ,如下所示:

    private FragmentManager mFragmentManager;
    private FragmentTransaction mFragmentTransaction;
    Fragment listFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
//Listfragment here
        listFragment = new ListFragment();
        mFragmentManager = getSupportFragmentManager();
        mFragmentTransaction = mFragmentManager.beginTransaction();
        mFragmentTransaction.replace(R.id.frame, listFragment, "List");
        mFragmentTransaction.addToBackStack("List");
        mFragmentTransaction.commit();    }

同样在List Fragment中调用Detail Fragment,如:

mListview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment detailFragment = new DetailFragment();
                mFragmentManager = getFragmentManager();
                mFragmentTransaction = mFragmentManager.beginTransaction();
                mFragmentTransaction.replace(R.id.frame, detailFragment, "Detail");
                mFragmentTransaction.addToBackStack("Detail");
                mFragmentTransaction.commit();
            }
        });

在你 MainActivity

  @Override
    public void onBackPressed() {
        if(listFragment.isVisible()){
            **//Do Nothing - DOES NOT CLOSE THE APP**
        }
        else{
            super.onBackPressed();
        }
    }

注意

除非你有充分的理由,否则请不要这样做,因为打破预期的操作模式会对整个平台造成轻微伤害

答案 4 :(得分:0)

如果您不想最小化您的应用,则应在MainActivityListFragement下面写下代码,但我建议MainActivity

@Override
    public void onBackPressed() {
    }