2016-03-01 63 views
0

我有一個從PreferenceActivity派生的UserSettingsActivity的Android應用程序。當我打開這個活動時,沒有顯示菜單欄。如何在PreferenceActivity中使用ActionBar?

爲了在設置屏幕頂部顯示「酒吧」或「操作欄」,我在谷歌搜索到了this linkthis link。因爲第一個答案似乎已經過時了,所以我在第二個鏈接中嘗試了這個建議,這個鏈接不起作用。因此,我再次發佈了這個問題。這裏是代碼片段我使用:

preferences.xml(我說只是android.support.v7.widget.Toolbar部分):

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:minHeight="?attr/actionBarSize" 
    app:navigationContentDescription="@string/abc_action_bar_up_description" 
    android:background="?attr/colorPrimary" 
    app:navigationIcon="?attr/homeAsUpIndicator" 
    app:title="@string/action_settings" 
    /> 

    <ListPreference 
     android:title="@string/UpdateInterval" 
     android:summary="@string/UpdateIntervalText" 
     android:key="updateInterval" 
     android:defaultValue="24" 
     android:entries="@array/listArray" 
     android:entryValues="@array/listValues" /> 

    <ListPreference 
     android:title="@string/LimitSetting" 
     android:summary="@string/LimitSettingText" 
     android:key="limitSetting" 
     android:entries="@array/limitArray" 
     android:entryValues="@array/limitValues" /> 

    <Preference 
     android:key="reset" 
     android:title="Reset database" 
     android:summary="This will remove every entry in the database" 
     /> 
</PreferenceScreen> 

UserSettingsActivity.java(我加了​​部分):

public class UserSettingActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit(); 

    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 

     LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent(); 
     Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.xml.preferences, root, false); 
     root.addView(bar, 0); // insert at top 
     bar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
    } 

    public class MyPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); // <<-- ERROR HERE 
      // doing something here 

     } 
    } 

} 

不過,我得到以下錯誤:

Caused by: java.lang.ClassCastException: android.support.v7.widget.Toolbar cannot be cast to android.preference.Preference 
標記線上的

。如果沒有在這兩個文件中添加的應用程序,該應用程序確實工作,但沒有(動作)欄,但是...

這似乎是什麼問題?

+0

在升級到支持庫v21之後PreferenceActivity中沒有ActionBar的可能重複(http://stackoverflow.com/questions/26509180/no -action-bar-in-preferenceactivity-after-upgrade-support-library-v21),哦,你已經找到我的問題了。你也嘗試[我自己的解決方案](http://stackoverflow.com/a/26995921/995926)? – rekire

+0

是的,我發現你的問題。但是,正確的解決方案是什麼?我應該盲目地嘗試所有不同的可能性和組合嗎? – Alex

+0

那麼我用我自己的答案結束了這種情況。我建議使用更新的偏好支持庫:https://plus.google.com/+AndroidDevelopers/posts/9kZ3SsXdT2T – rekire

回答

-1

試試這個。
使用AppCompatActivity擴展您的活動
然後添加工具欄。請參閱: - http://coderzpassion.com/android-working-with-material-design/

+0

請給關於如何更改我的代碼的代碼示例。我是一個初學者,你提供的鏈接中的信息在我看來就像天體物理計算對你來說似乎... – Alex

0

PreferenceActivity現已棄用。在任何其他活動中使用PreferenceFragment,可以從PreferenceActivity以外的任何父活動擴展

+0

沒有一些代碼示例,你的答案對我來說是無用的。我是一個絕對的初學者,我不知道應該把PreferenceFragment放在哪裏,或者如何改變所有其他的代碼來使它像你所說的那樣工作...... – Alex

相關問題