1つのコンテナビューエレメントに異なるフラグメントをロードできるアクティビティを実装しようとしています。私はBuilding a Flexible UI Trainingに従います。問題:フラグメントを置き換えるときに、置き換えられたフラグメントをバックグラウンドで引き続き見ることができます。置き換えられたフラグメントはまだ新しいフラグメントの後ろに表示されます
私の質問は何度も尋ねられています。しかし、私が見つけたすべての答えはちょうど回避策(断片の背景色を設定する)か適用されないようです。ここで
は、私がこれまでのセットアップを持っているものです。
活動のXMLレイアウトがフラグメントのコンテナとして1でframeLayoutが含まれています
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
ID fragment_container
がプロジェクトに他のどこにも使用されています。
最初のフラグメントの完全なXMLレイアウト:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="First Fragment" />
第2のフラグメントの完全なXMLレイアウト:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textColor="#ff0000"
android:text="Fragment Second" />
最初のフラグメントのクラスファイルは、第二のために、この(クラスのように見えますフラグメント類似):
public class FirstFragment extends Fragment {
public FirstFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_first, container, false);
}
}
アクティビティのonCreateメソッドでは、最初のfr agment:
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new SecondFragment())
.addToBackStack(null) // <-- does not make any difference if left out
.commit();
結果は、テキスト「フラグメントセカンド:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// load first fragment
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, new FirstFragment())
.commit();
}
}
は私が活動の
onOptionsItemSelected
方法でこのコードの第2のフラグメントで最初のフラグメントを交換しようとするメニュー項目を選択"がテキスト" First Fragment "の上に赤色で印刷されています。
この問題を解決するための「正しい方法」(背景色を設定するだけではない)は何ですか?
ありがとうございました!それだった! –
あなたは 'onOptionsItemSelected'がアクティビティに属していると言いました。フラグメントでは、通常のフラグメントは通常の 'FragmentManager'のみを知っているため、' getFragmentManager() 'は常に正しいことを行い、サポートフラグメントはサポートされているフラグメントについてしか知りません。もしそれがアクティビティの 'onOptionsItemSelected'であると言わなかったなら、私はフラグメントから呼び出すと仮定していましたが、これは問題がないでしょう。 –