2017-05-19 8 views
0

Ich brauche Hilfe, um ein Problem mit PreferenceFragmentCompat zu beheben, die einfach nicht angezeigt wird, kein Fehler in der Konsole, keine Nachricht, nichts, nur eine leere Seite.PreferenceFragmentCompat zeigt nicht

Das Fragment wird als Ergebnis der Auswahl eines Elements in einer Navigationsleiste angezeigt. Hier ist die XML-Aktivität:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="false"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <FrameLayout 
      android:id="@+id/list_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     </FrameLayout> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|end" 
      android:layout_marginBottom="24dp" 
      android:layout_marginEnd="24dp" 
      app:elevation="12dp" 
      app:fabSize="normal" 
      app:rippleColor="@color/nowControlsNormal" 
      app:srcCompat="@android:drawable/ic_popup_sync" /> 

    </FrameLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/drawer" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/drawer_top" 
     app:itemIconTint="@color/nowBlack" 
     app:itemTextColor="@color/nowBlack" 
     app:menu="@menu/drawer_menu" /> 

</android.support.v4.widget.DrawerLayout> 

Hier ist die Aktivität Java:

public class HomeActivity extends AppCompatActivity { 

    SharedPreferences settings; 
    private DrawerLayout drawerLayout; 
    private ActionBarDrawerToggle drawerToggle; 
    NavigationView nav; 
    TextView drawerUsername; 
    FloatingActionButton fab; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settings = getSharedPreferences("NowCLOUD", 0); 
     setContentView(R.layout.activity_home); 
     drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     nav = (NavigationView) findViewById(R.id.drawer); 
     fab = (FloatingActionButton) findViewById(R.id.fab); 
     View headerView = nav.getHeaderView(0); 
     drawerUsername = (TextView) headerView.findViewById(R.id.drawer_username); 

     fab.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //TODO: Gestire aggiornamento al click della FAB 
      } 
     }); 

     getSupportActionBar().setTitle("Home"); 

     drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) { 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
      } 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
      } 
     }; 

     drawerLayout.setDrawerListener(drawerToggle); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 

     getSupportFragmentManager().beginTransaction() 
       .add(R.id.list_container, HomeFragment.newInstance()) 
       .commit(); 

     drawerUsername.setText(settings.getString("username", "Error")); 

     nav.setNavigationItemSelectedListener(
       new NavigationView.OnNavigationItemSelectedListener() { 
        @Override 
        public boolean onNavigationItemSelected(MenuItem menuItem) { 
         menuItem.setChecked(true); 
         drawerLayout.closeDrawers(); 
         displayView(menuItem.getItemId()); 
         return true; 
        } 
       }); 
    } 

    public void displayView(int viewId) { 

     Fragment fragment = null; 
     String title = getString(R.string.app_name); 

     switch (viewId) { 
      case R.id.drawer_home: 
       fragment = HomeFragment.newInstance(); 
       title = "Home"; 
       break; 

      case R.id.drawer_settings: 
       fragment = SettingsFragment.newInstance(); 
       title = "Settings"; 
       break; 
     } 

     if (fragment != null) { 
      getSupportFragmentManager().beginTransaction() 
        .replace(R.id.list_container, fragment) 
        .commit(); 
     } 

     // set the toolbar title 
     if (getSupportActionBar() != null) { 
      getSupportActionBar().setTitle(title); 
     } 

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

    } 
} 

Hier ist das XML fragment:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.preference.PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent"> 

    <android.support.v7.preference.PreferenceCategory 
     android:title="@string/settings_synchronization"> 

     <android.support.v7.preference.SwitchPreferenceCompat 
      android:key="auto_updates" 
      android:title="@string/settings_auto_sync" /> 

    </android.support.v7.preference.PreferenceCategory> 

</android.support.v7.preference.PreferenceScreen> 

Hier ist das Java Fragment:

public class SettingsFragment extends PreferenceFragmentCompat { 
    View rootView; 

    @Override 
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { 
     addPreferencesFromResource(R.xml.fragment_settings); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     //rootView = inflater.inflate(R.xml.fragment_settings,container,false); 
     return rootView; 
    } 

    @Override 
    public PreferenceFragmentCompat getCallbackFragment() { 
     return this; 
    } 

    public static SettingsFragment newInstance() { 
     Bundle args = new Bundle(); 
     SettingsFragment fragment = new SettingsFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 
} 

I‘ Ich habe den ganzen Code entfernt, der w so nutzlos für diesen Zweck. Entschuldigung für die riesige Menge an Code.

Antwort

0

Ich habe es selbst herausgefunden:
Wenn Sie preferencefragment verwenden, können Sie die onCreateView-Methode nicht überschreiben, sonst erhalten Sie einen leeren Bildschirm.