2017-12-22 33 views
0

Es fällt mir schwer herauszufinden, warum mein FragmentManager nicht funktioniert.
Ich verwende eine Android-Studio-Vorlage für die Aktivität der nav-Schublade. Die verwirrendste Sache ist, ich habe den gleichen Code in einer anderen App und es funktioniert gut.FragmentManager ersetzen funktioniert nicht?

Hier ist der Code:

@Override 
public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

    int id = item.getItemId(); 

    Fragment fragment = null; 

    switch (id) { 
     case R.id.nav_camera: 
      fragment = new MyFragment(); 
      Log.i("ID", String.valueOf(id)); 

      break; 
     case R.id.nav_gallery: 
      break; 
    } 

    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction() 
      .replace(R.id.content_main, fragment) 
      .commit(); 

    DrawerLayout drawer = findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 

} 

Nun, wenn ich auf der nav_camera klicken protokolliert es den Klick ganz gut, aber es passiert nichts anderes, wird das Fragment nicht ersetzt bekommen. Keine Fehler, keine Ausnahmen, immer wieder derselbe Bildschirm.

Fragment Code, nichts hier nur die Prüfung:

public class MyFragment extends Fragment { 

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

    return inflater.inflate(R.layout.fragment_list, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
} 
} 

Fragment Layout, nur ein leerer:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 

Der Rest des Codes ist durch die automatisch andorid Studio erzeugt. Hier

ist content_main, die ich versuche, mit fm zu ersetzen:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/content_main" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="com.example.goran.mymoviedb.movies.MainActivity" 
tools:showIn="@layout/app_bar_main"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" 
    app:layout_constraintBottom_toBottomOf="parent" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toTopOf="parent" /> 

Es sollte das Layout mit einem leeren ein whan nav_camera ersetzen geklickt, aber nichts passiert, auch wenn richtige Klick Eingetragen.

+0

Ihr Code ist nicht vollständig, aber ich werde es versuchen. Jede Aktivität hat einen Anspruch auf einen Java-Code für dynamischen Inhalt und ein XML-Layout für statischen Code. Die Aktivität kann null bis viele Fragmente haben. Jedes Fragment hat einen Anspruch auf ein Java und ein XML. Dieser Code, den Sie gepostet haben, sollte in der Aktivität enthalten sein. Ihr Problem scheint zu sein, dass Sie listfragment direkt erweitern, anstatt es zu erweitern. Siehe Mylistfragment hier https://www.tutorialspoint.com/android/android_list_fragment.htm – Pomagranite

+0

Natürlich ist es in der Aktivität, ich schrieb, dass es automatisch generierte nav bar activty war. Nichts wird geändert, außer der von mir geposteten Methode. –

+0

Was ich sage ist, dass Sie eine MainActivity extends Aktivität gemacht haben und MyFragment ListFragment erweitern soll. – Pomagranite

Antwort

0

Eigentlich funktioniert Ihr Code, aber das Problem ist, dass Sie blank Layout haben und weil der Hintergrund des Fragmentlayouts standardmäßig transparent ist, können Sie die Änderung nicht sehen. Setzen Sie Hintergrundfarbe auf Ihrem Wurzel-Layout des Fragments (LinearLayout) zum Beispiel: android:background="@android:color/white" und Sie werden Ersatzfragment sehen.

+0

Oh, das macht So viel Sinn.Ich nahm an, es war leer/weißer Hintergrund, fühle mich jetzt so albern. Vielen Dank! :) –