正在删除片段

时间:2015-09-03 09:22:38

标签: android android-fragments

当我尝试删除片段时,if检查无法正常工作 我的代码是

public void onClick(View v) {
switch (v.getId()) {
case R.id.vehicle_button:

if(getSupportFragmentManager().findFragmentById(R.id.relative_tread_fragment).isVisible()){

getSupportFragmentManager().beginTransaction().remove(getSupportFragmentManager().findFragmentById(R.id.relative_tread_fragment)).commit();
}
flag = true;
break;

case R.id.trailer_button:
flag = false;
break;

case R.id.button_search:

if (VRN.contains(actv.getText().toString()) && flag == true) {
getSupportFragmentManager().beginTransaction().replace(R.id.relative_tread_fragment, fragment1).commit();
}
else if (VRN.contains(actv.getText().toString()) && flag == false) 
{
getSupportFragmentManager().beginTransaction().replace(R.id.relative_tread_fragment, fragment2).commit();
}
else {
flag = true;
Custom_Dialog(v);
}

我想删除是否已存在任何片段, 但是如果没有片段,则 if block 检查是否有任何片段不起作用,应用程序尝试删除不存在的片段和应用程序崩溃

如果有碎片我应该如何chk?

3 个答案:

答案 0 :(得分:1)

您可以使用它来检查某个片段是否在某个持有者布局中:

Fragment yourFrag = getSupportFragmentManager().findFragmentById(R.id.yourFragmentHolderView);
        return yourFrag != null && yourFrag instanceof whateverFragment;

然后,您可以在该片段上使用isVisible()等方法,并在需要时将其删除。

例如,我有一个包含收件箱或发件箱片段的活动。如果我想知道哪一个是活动的,我使用以下方法之一:

public boolean checkIsInbox() {
        Fragment inboxFrag = getSupportFragmentManager().findFragmentById(LIST_FRAG_HOLDER_ID);
        return inboxFrag != null && inboxFrag instanceof InboxListFragment;
    }

    public boolean checkIsOutbox() {
        Fragment outboxFrag = getSupportFragmentManager().findFragmentById(LIST_FRAG_HOLDER_ID);
        return outboxFrag != null && outboxFrag instanceof OutboxListFragment;
    }

答案 1 :(得分:0)

如果可以,你应该使用替换而不是删除。如果要删除所有片段,则只需清空后栈,如:

 getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

答案 2 :(得分:0)

试试这个;

  • 创建一个布尔类型全局变量
  • 使用该变量来检查片段是否可见,例如
    • 将布尔变量设置为true,片段可见
    • else变量为false,片段被隐藏。