2016-05-14 25 views
7

Đây là hoạt động ưu tiên của tôi:add thanh tác vụ có nút quay lại trong hoạt động sở thích

package com.example.hms.test; 

import android.os.Bundle; 
import android.preference.PreferenceActivity; 

public class PrefsActivity extends PreferenceActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.prefs); 
    } 

} 

ở đây tôi muốn hiển thị một actionbar với các thiết lập tên và một nút quay lại để nhà

+0

có thể trùng lặp của [Tạo ra một màn hình với sự hỗ trợ Preference (v21) Toolbar] (http://stackoverflow.com/questions/26564400/creating-a-preference-screen-with- support-v 21 thanh công cụ) – Shubhank

+0

thử http://stackoverflow.com/a/27455363/3981656 –

+0

Đồng thời kiểm tra điều này [Thêm ActionBar vào một PreferenceActivity] (http://stackoverflow.com/questions/30793609/add-actionbar-to-a -preferenceactivity) – jayeshsolanki93

Trả lời

15

Bạn nên làm vài điều:

  1. Thêm dòng sau vào onCreate lại PreferenceActivity:

    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    
  2. Override onOptionsItemSelected trong PreferenceActivity:

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) 
        { 
         case android.R.id.home: 
          NavUtils.navigateUpFromSameTask(this); 
          return true; 
        } 
        return super.onOptionsItemSelected(item); 
    } 
    
  3. thay đổi các <activity> thẻ trong manifest cho PreferenceActivity của bạn để tìm một cái gì đó như thế này:

    <activity 
        android:name=".PrefsActivity" 
        android:label="@string/title_activity_settings" 
        android:parentActivityName=".MainActivity"> 
        <meta-data 
        android:name="android.support.PARENT_ACTIVITY" 
        android:value="com.example.android.MainActivity" /> 
    </activity> 
    
  4. Cuối cùng đặt android: launchMode = "singleTop" trong thẻ MainActivity <activity> trong tệp kê khai:

    <activity 
        android:name=".MainActivity" 
        android:label="@string/app_name" 
        android:launchMode="singleTop" 
        android:theme="@style/AppTheme.NoActionBar"> 
        <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
    
        <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
    </activity> 
    
+0

Nhưng PreferenceActivity không mở rộng AbbCombatActivity !! –

+0

Xin lỗi nhưng, getSupportActionBar() không được tìm thấy khi lớp của tôi mở rộng PreferenceActivity – Denny

7

Câu trả lời Pooya đưa ra sẽ không hoạt động đối với PreferenceActivity. Thay vào đó, hãy tạo lớp của bạn mở rộng AppCompatActivity và sử dụng một PreferenceFragment để tải lên tùy chọn. Đây là mã của tôi cho cài đặt:

public class MyPrefsActivity extends AppCompatActivity { 

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

     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    } 

    @Override 
    public boolean onSupportNavigateUp(){ 
     finish(); 
     return true; 
    } 

    public static class MyPreferenceFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(final Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      addPreferencesFromResource(R.xml.preferences); 
     } 
    } 
} 

Đặt hoạt động trong AndroidManifest.xml của bạn:

<activity android:name=".MyPrefsActivity" 
    android:label="Preferences" 
    android:theme="@style/AppTheme"/> 

Và bây giờ bạn có thể bắt đầu các hoạt động cài đặt sử dụng một ý định trong Hoạt động chính của tôi (hoặc bất cứ cha mẹ hoạt động bạn có) như bình thường:

Intent prefsIntent = new Intent(activity, MyPrefsActivity.class); 
activity.startActivity(prefsIntent); 
+0

Cách tiếp cận này sẽ ** không hoạt động ** trong trường hợp bất kỳ loại chủ đề 'NoActionBar' nào được áp dụng cho' MyPrefsActivity', vì vậy lệnh gọi 'getSupportActionBar()' sẽ trả về vô giá trị. – Eido95

Các vấn đề liên quan