webentwicklung-frage-antwort-db.com.de

So ändern Sie Fragmente mithilfe der Android-Navigationsleiste

Ich weiß, dass diese Art von Fragen bereits hier waren, aber ich habe noch keine Antwort auf diese Frage gefunden:

  • Ich habe eine Anwendung erstellt und eine Navigationsleiste verwendet, die AUTOMATISCH von der App (AndroidStudio) erstellt wurde.

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();
    

    }

36
user3053246

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

66
Dreagen

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;
    }
8
DenisGl

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.

5
Egor

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!

3
Nemesis

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;
}
0
user5157325