これらのタイプの質問はすでにここにあることは知っていますが、この質問に対する私の答えはまだ見つかりません。
私が持っているものは次のとおりです。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
mTitle = getTitle();
// Set up the drawer.
mNavigationDrawerFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
public void onSectionAttached(int number) {
switch (number) {
case 1:
break;
case 2:
break;
case 3:
break;
}
}
そして、さらにここに:
public static PlaceholderFragment newInstance(int sectionNumber) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((MainActivity) activity).onSectionAttached(
getArguments().getInt(ARG_SECTION_NUMBER));
}
}
ナビゲーションドロワーのボタンを使用して別のフラグメントを表示したい。このコードを使用したいので、独自の引き出しを作成するガイドやチュートリアルを送らないでください。
問題は、case 1:
case 2:
およびcase 3:
別のフラグメントを開きたい場合は?ありがとう。
もう1つの質問:
フラグメントとトランザクションを追加するにはどうすればよいですか?これは機能しません
Fragment fragment = new MyFragment1();
Fragment frag = new MyFragment2();
FragmentManager fragmentManager = getFragmentManager();
switch(position) {
case 0:
fragment = new MyFragment1();
break;
case 1:
frag = new MyFragment2();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.container, fragment).commit();
onNavigationDrawerItemSelected
メソッドにswitchステートメントを配置するだけです。
このような何かが動作するはずです:
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
Fragment fragment;
FragmentManager fragmentManager = getFragmentManager(); // For AppCompat use getSupportFragmentManager
switch(position) {
default:
case 0:
fragment = new MyFragment1();
break;
case 1:
fragment = new MyFragment2();
break;
}
fragmentManager.beginTransaction()
.replace(R.id.container, fragment)
.commit();
}
これはすぐに行われますが、うまくいくと思います
inflater
でこの問題を解決しました:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView;
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_obj_detail, container, false);
break;
case 2:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_about, container, false);
break;
default:
rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
}
return rootView;
}
onNavigationDrawerItemSelected(
)内にswitch
ブロックを作成し、case
ではなく、対応するFragment
を使用して、すべてのPlaceholderFragment
に既にあるコードを使用する必要があります。レイアウトにPlaceholderFragment
を追加するための汎用コードが含まれるようになり、目的に合わせて再利用できます。
DenisGlの応答は正しい方法です!!!デフォルトで作成されたクラスメンバーを使用して、ナビゲーションドロワーのさまざまなコンポーネントを切り替えることができます!!クラスメンバーPlaceholderFragment内にあるメソッドonCreateViewを使用する必要があります。このクラスは、onNavigationDrawerItemSelectedメソッドで自動的に呼び出されます
コード例は次のとおりです。/このメソッドはそのままでかまいません!クラスPlaceholderFragment!/を自動的に呼び出します
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
.commit();
}
代わりにSwitch Caseを入力するこのメソッド。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
rootView = inflater.inflate(R.layout.fragment_home, container, false);
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_home, container, false);
break;
case 2:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_info, container, false);
break;
}
return rootView;
}
明らかに、興味のある各フラグメントのレイアウトを呼び出す必要があります!
これは100%動作し、検証テスト!
Eclipse IDEで動作します
switch(getArguments().getInt(ARG_SECTION_NUMBER)) {
case 1:
rootView = inflater.inflate(R.layout.fragment_home, container, false);
break;
case 2:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 3:
//rootView = inflater.inflate(R.layout.fragment_obj_list, container, false);
break;
case 4:
rootView = inflater.inflate(R.layout.fragment_info, container, false);
break;
}
機能中
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}