I have an activity which has a MaterialDrawer created. The material Drawer code is as follows
SecondaryDrawerItem item1 = new SecondaryDrawerItem().withIdentifier(1).withName(R.string.drawer_item_home)
.withIcon(new IconicsDrawable(this)
.icon(GoogleMaterial.Icon.gmd_home)
.sizeRes(R.dimen.activity_horizontal_margin));
SecondaryDrawerItem item2 = new SecondaryDrawerItem().withIdentifier(2).withName(R.string.drawer_item_graph)
.withIcon(new IconicsDrawable(this)
.icon(GoogleMaterial.Icon.gmd_trending_up)
.sizeRes(R.dimen.activity_horizontal_margin));
SecondaryDrawerItem item3 = new SecondaryDrawerItem().withIdentifier(3).withName(R.string.drawer_item_map)
.withIcon(new IconicsDrawable(this)
.icon(GoogleMaterial.Icon.gmd_map)
.sizeRes(R.dimen.activity_horizontal_margin));
SecondaryDrawerItem item4 = new SecondaryDrawerItem().withIdentifier(4).withName(R.string.drawer_item_settings)
.withIcon(new IconicsDrawable(this)
.icon(GoogleMaterial.Icon.gmd_settings)
.sizeRes(R.dimen.activity_horizontal_margin))
.withSelectable(false);
new DrawerBuilder()
.withActivity(this)
.withToolbar(getToolbar())
.withSelectedItem(1)
.withAccountHeader(headerResult)
.withActionBarDrawerToggleAnimated(true)
.addDrawerItems(
item1,
item2,
item3,
new DividerDrawerItem(),
item4
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
// do something with the clicked item :D
if (drawerItem != null) {
if (drawerItem.getIdentifier() == 1) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment, new WeatherFragment())
.commit();
}
else if (drawerItem.getIdentifier() == 2) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment, new GraphsFragment())
.commit();
}
else if (drawerItem.getIdentifier() == 3) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment, new MapsFragment())
.commit();
}
else if (drawerItem.getIdentifier() == 4) {
startActivity(new Intent(WeatherActivity.this, AboutActivity.class));
}
}
return false;
}
})
.build();
When my app starts, the default option selected is 1, ie. the activity automatically loads WeatherFragment when the App is started. The problem occurs when I click on the Second item in the list : Graphs Fragment. According to the code, it should have worked, but what it does is it retains the old fragment in view, and does not load the layout of the new Fragment.
Here is the Activity XML Layout:
<android.support.design.widget.CoordinatorLayout 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:background="@color/colorPrimary"
tools:context="com.a5corp.weather.activity.WeatherActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.NoActionBar.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.NoActionBar.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_weather" />
<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_margin="@dimen/fab_margin"
app:srcCompat="@drawable/ic_search_white_24dp" />
</android.support.design.widget.CoordinatorLayout>
content_weather.xml :
<fragment 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:id="@+id/fragment"
android:name="com.a5corp.weather.fragment.WeatherFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:layout="@layout/fragment_weather" />
Until now, what is clear is that WeatherActivity will always load fragment_weather (WeatherFragment) as such. But when I click on the GraphsFragment (second item), it does not load that layout
Here is my GraphsFragment code:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
Log.i("Loaded" , "Fragment"); //This Log info shows up in the Android Logger
rootView = inflater.inflate(R.layout.fragment_graphs, container, false);
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MaterialDialog.Builder builder = new MaterialDialog.Builder(this.getActivity())
.title("Please Wait")
.content("Loading")
.progress(true , 0);
builder.build().show();
}
fragment_graphs.xml :
<android.support.v4.widget.SwipeRefreshLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="111dp"
android:text="Button"/>
<Switch
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/button2"
android:layout_below="@+id/button2"
android:layout_marginTop="40dp"
android:text="Switch"/>
</RelativeLayout>
</android.support.v4.widget.SwipeRefreshLayout>
The progress dialog shows as such, but the layout items like the button and the switch from GraphsFragment XML do not load.
How will I load the GraphsFragment when clicked from the Drawer, along with the layout inflated and the progress dialog shown
Turns out I only needed to add a FrameLayout
instead of include
ing the layout.
Here is the modified main XML file
<android.support.design.widget.CoordinatorLayout 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:background="@color/colorPrimary"
tools:context="com.a5corp.weather.activity.WeatherActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/appBar"
android:theme="@style/AppTheme.NoActionBar.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.NoActionBar.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment"
android:paddingTop="?attr/actionBarSize"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.a5corp.weather.WeatherActivity"
tools:ignore="MergeRootFrame"
android:background="@color/colorPrimary" />
</android.support.design.widget.CoordinatorLayout>