Ich weiß, dass diese Art von Fragen bereits hier waren, aber ich habe noch keine Antwort auf diese Frage gefunden:
Folgendes habe ich:
@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;
}
}
Und noch mehr hier:
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));
}
}
Ich möchte ein anderes Fragment mit der Schaltfläche in der Navigationsleiste anzeigen. Ich möchte diesen Code verwenden, also senden Sie mir bitte keine Anleitungen oder Anleitungen, die ihre eigenen Schubladen erstellen.
Die Frage ist, was ich in case 1:
case 2:
und case 3:
einfügen sollte, falls ich ein anderes Fragment öffnen möchte. Thanx.
Noch eine Frage:
Wie füge ich weitere Fragmente und Transaktionen hinzu? Das funktioniert nicht-
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();
}
Sie sollten nur eine switch-Anweisung in die onNavigationDrawerItemSelected
-Methode einfügen.
So etwas sollte funktionieren:
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();
}
Dies ist nur schnell erledigt, aber ich denke, es sollte funktionieren
Ich habe dieses Problem über inflater
gelöst:
@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;
}
Sie müssen einen switch
-Block im onNavigationDrawerItemSelected(
) erstellen und den Code verwenden, der bereits für jede case
vorhanden ist, jedoch mit der entsprechenden Fragment
anstelle von PlaceholderFragment
. Jetzt enthält es einen generischen Code, um eine PlaceholderFragment
zum Layout hinzuzufügen, und es für Ihre Zwecke wiederverwenden.
Die Antwort von DenisGl ist der richtige Weg !!! Mit dem standardmäßig erstellten Klassenmitglied können Sie zwischen den verschiedenen Komponenten der Navigationsleiste !! Wechseln. Sie müssen die Methode onCreateView verwenden, die sich im Klassenmitglied PlaceholderFragment ..__ befindet. Diese Klasse wird automatisch aufgerufen in der Methode onNavigationDrawerItemSelected
Hier ist das Codebeispiel: /Diese Methode kann beibehalten werden! Es ruft automatisch die Klasse PlaceholderFragment auf! /
@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();
}
Diese Methode stattdessen, wenn Sie den Switch Case eingeben:
@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;
}
Natürlich müssen Sie das Layout für jedes Fragment aufrufen, das uns interessiert!
Das funktioniert 100%, Test zur Bestätigung!
Es funktioniert in 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;
}
in Funktion
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}