7

SettingsActivity私はPreferenceActivityを拡張して、私のアプリの設定を表示しています。setDisplayHomeAsUpEnabled()はPreferenceActivityで動作しません

戻る矢印がありますが、機能していません。ここで

SettingsActivity.javaファイルのコードは次のとおりです。ここで

public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener{ 

    private AppCompatDelegate mDelegate; 

    public static final String RESET_PASSWORD_KEY = "reset_password"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     getDelegate().installViewFactory(); 
     getDelegate().onCreate(savedInstanceState); 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.preferences); 

     SharedPreferences sharedPreferencesCompat = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     Preference myPref = (Preference) findPreference(RESET_PASSWORD_KEY); 
     myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { 
      public boolean onPreferenceClick(Preference preference) { 
       //open browser or intent here 
       Intent resetPasswordActivityIntent = new Intent(SettingsActivity.this, ResetPasswordActivity.class); 
       startActivity(resetPasswordActivityIntent); 
       return true; 
      } 
     }); 

    } 

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

    public ActionBar getSupportActionBar() { 
     return getDelegate().getSupportActionBar(); 
    } 

    public void setSupportActionBar(@Nullable Toolbar toolbar) { 
     getDelegate().setSupportActionBar(toolbar); 
     getDelegate().getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    @Override 
    public MenuInflater getMenuInflater() { 
     return getDelegate().getMenuInflater(); 
    } 

    @Override 
    public void setContentView(@LayoutRes int layoutResID) { 
     getDelegate().setContentView(layoutResID); 
    } 

    @Override 
    public void setContentView(View view) { 
     getDelegate().setContentView(view); 
    } 

    @Override 
    public void setContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().setContentView(view, params); 
    } 

    @Override 
    public void addContentView(View view, ViewGroup.LayoutParams params) { 
     getDelegate().addContentView(view, params); 
    } 

    @Override 
    protected void onPostResume() { 
     super.onPostResume(); 
     getDelegate().onPostResume(); 
    } 

    @Override 
    protected void onTitleChanged(CharSequence title, int color) { 
     super.onTitleChanged(title, color); 
     getDelegate().setTitle(title); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     getDelegate().onConfigurationChanged(newConfig); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     getDelegate().onStop(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     getDelegate().onDestroy(); 
    } 

    public void invalidateOptionsMenu() { 
     getDelegate().invalidateOptionsMenu(); 
    } 

    private AppCompatDelegate getDelegate() { 
     if (mDelegate == null) { 
      mDelegate = AppCompatDelegate.create(this, null); 
     } 
     return mDelegate; 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     if (key.equals(RESET_PASSWORD_KEY)) { 

     } 
    } 
} 

preferences.xmlファイルのコードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <Preference 
     android:title="xxx" 
     android:summary="xxxxxx" 
     android:key="reset_password" /> 
</PreferenceScreen> 

はここにSettingsActivity」がAndroidManifest.xmlで定義されている方法は次のとおりです。

私はことを確認するにはどうすればよい
<activity 
    android:name=".SettingsActivity" 
    android:label="@string/title_activity_settings" 
    android:parentActivityName=".MainActivity"> 
</activity> 

矢印は操作可能ですか?

お知らせください。

申し訳ありませんが、質問形式が不適切と思われる場合は、私はまだ初心者です。

+0

あなたのツールバーはどこですか? – notsopopularguy

答えて

22

でこのメソッドを呼び出すのを忘れていました。

また、あなたはonOptionsItemSelectedを実装する場合があります

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     onBackPressed(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
+0

ニース、そのお返事あり – Sapher

2

あなたは、あなたのプライベートメソッドsetSupportActionBar()onCreate()内で呼び出す必要があり、あなたのonCreate()

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
+0

ありがとう、しかしこれは助けにはなりませんでした! –

2

私はあなたが達成しようとするかもしれないものにいくつかの仮定を行いました。これは、PreferenceActivityでカスタムツールバーを使用する場合に有効です。次のコードはonPostCreateView()内にあります

LinearLayout root = (LinearLayout)findViewById(android.R.id.list).getParent().getParent().getParent(); 
mToolBar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.toolbar, root,false); 
mToolBar.setTitle(R.string.title); 
// insert at top 
root.addView(mToolBar, 0); 

setSupportActionBar(mToolBar); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowHomeEnabled(true); 
+0

どこにこの情報を追加すればよいですか? –

+0

@HammadNasirが答えを更新しました – notsopopularguy

関連する問題