2016-11-24 109 views
2

我有一個問題,即每當我打開一個新的片段從另一個片段它打開,但是當我回來的時候回來按鈕,那麼爲什麼它保存了前一個片段的背景視圖,如果我添加了這個一段代碼該片段如果片段後android中的片段

(container != null) { 
     container.removeAllViews(); 
    } 

然後它得到了整個屏幕,其中i希望它是工具欄下的,它得到了它和工具欄未示出,有時應用也停止。 我是碎片新手,所以請以平靜詳細的方式回答我的問題。 我已經添加了一個如何顯示屏幕的流程,除了第一個屏幕外,這個屏幕看上去與第二個屏幕看上去部分一樣。 this is the flow of all the screensthis is the screen when flow goes from fourth to second fragment, partial scrren visibility problem as i want to show the background fully only and not the table layout onewhich is appearing over it

我使用此代碼上的按鈕

Addhearingnewfrag fragment = new Addhearingnewfrag(); 
      FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.contentFragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 
+0

樣品導航抽屜例子是否要刪除以前的片段,這樣,當你回去是不可見的? – SaNtoRiaN

+0

這取決於您將碎片「添加」或「替換」到主容器的方式。如果使用「添加」,則將新片段添加到前一個片段,但如果使用替換,則會將新片段替換爲新片段。 –

+0

你能顯示你的完整代碼嗎? – Sachin

回答

1

需要的任何其他顏色我怎麼一回事,因爲你正在使用錯誤的片段經理想這個問題。如果從另一個片段打開片段,你應該使用

getChildFragmentManager()

,而不是

getActivity().getSupportFragmentManager()

UPDATE

public class MyActivity implements Activity implements ChangeFragListener{ 

public interface ChangeFragListener{ 
    change(String id); 
}    

@Override 
public void change(String id){ 
    ... 
    if(id.equals("addxx")){ 
      Addhearingnewfrag fragment = new Addhearingnewfrag(); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.contentFragment, fragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }); 
    } 
} 

} 

XFRagment.java

public XFragment extends Fragment{ 
    private ChangeFragListener listener; 

    protected void onCreate(Bundle savedInstanceState) { 
     listener = (ChangeFragListener)getActivity(); 
    } 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

btn.setOnClickListener(new View.OnClickListener() 
{ 
    @Override 
    public void onClick(View v) 
    { 
     listener.change("fromOtherId"); 
    } 
}); 

    } 
} 

您也可以在其他片段中使用此接口。除非一個人是另一個孩子,否則你不應該直接替換其他片段中的片段。

更新 - 2

審查項目的主要問題是因爲片段container.For例子之後;您將家庭片段添加到R.id.frame。但是,您將其他片段替換爲R.id.drawer_layout。並且R.id.drawer_layout是對您的導航抽屜沒有片段容器的引用。

此外,R.id.frame看起來不像片段容器。它具有視圖組件。這裏有與片段

+1

我用你的方式,但應用程序停止和logcat顯示此錯誤:進程:com.orion.android.mylawyerdiary,PID:15511 java.lang.IllegalArgumentException:沒有找到id爲id 0x7f0d00aa – Annie

+0

這是R.id.contentFragment當前片段持有人視圖? – mismanc

+0

內容片段是用於加載片段的幀佈局的ID – Annie

0

的點擊片段添加這是因爲你當前的片段背景是透明的。

這種情況發生時,你使用:

FragmentTransaction.addToBackStack(String) 

,因爲以前的片段保持,所以當你推回去,你可以回到那裏。

的解決方法是指定:

android:background="@android:color/white" 

,或者你在你的片段佈局父標籤

+0

我曾經使用這段代碼,它沒有任何字符串Addhearingnewfrag片段= new Addhearingnewfrag(); // FragmentManager fragmentManager = getActivity()。getSupportFragmentManager(); // FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); // fragmentTransaction.replace(R.id.contentFragment,fragment); // fragmentTransaction.addToBackStack(null); // fragmentTransaction.commit(); //} //}); – Annie

+0

你不需要輸入字符串,addToBackStack(空)可能是很好,只是值得關注的是使用添加片段,而更換和設置您的佈局的背景=白色 – Farhan

+0

我用addToBackStack但仍是問題是有@Farhan – Annie