I'm trying to make an activity which extends AppCompatPreferenceActivity and implements an up button in the action bar. Visually everything looks fine, but the up button doesn't respond to touch events. The following is my java and xml code:
PrefrencesDisplayActivity.java
package com.example.matthew.testsettings;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.support.v7.widget.Toolbar;
import android.widget.ListView;
import android.widget.RelativeLayout;
import java.util.List;
public class PreferencesDisplayActivity extends AppCompatPreferenceActivity {
CoordinatorLayout activityRoot;
AppBarLayout appBarLayout;
Toolbar toolbar;
RelativeLayout contentRoot;
ListView preferencesList;
@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences, target);
initialiseUI();
}
private void initialiseUI() {
// Inflate activity layout from xml
setContentView(R.layout.activity_preferences_display);
// Get handles to UI elements
activityRoot = (CoordinatorLayout) findViewById(R.id.prefDisplay_activity_root);
appBarLayout = (AppBarLayout) findViewById(R.id.prefdisplay_activity_appBarLayout);
toolbar = (Toolbar) findViewById(R.id.prefDisplay_activity_toolbar);
contentRoot = (RelativeLayout) findViewById(R.id.prefDisplay_content_root);
preferencesList = (ListView) findViewById(android.R.id.list);
// Create and configure action bar
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
activity_prefrences_display.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:theme="@style/AppTheme.NoActionBar"
android:id="@+id/prefDisplay_activity_root"
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:fitsSystemWindows="true"
tools:context="com.example.matthew.testsettings.PreferencesDisplayActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/prefdisplay_activity_appBarLayout"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/prefDisplay_activity_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_preferences_display"/>
</android.support.design.widget.CoordinatorLayout>
content_preferences_display.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/prefDisplay_content_root"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/activity_preferences_display"
tools:context="com.example.matthew.testsettings.PreferencesDisplayActivity">
<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</RelativeLayout>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
package="com.example.matthew.testsettings"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".PreferencesDisplayActivity"
android:label="@string/title_activity_preferences_display"
android:parentActivityName="com.example.matthew.testsettings.MainActivity"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.matthew.testsettings.MainActivity"/>
</activity>
</application>
</manifest>
When I open the app and navigate to the preferences activity, the screen looks as it should but pressing the up button does nothing. Can anyone see my mistake?
You can also just use finish()
when the back button is pressed:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With