简体   繁体   English

设置活动如何使用顶部的箭头导航回来

[英]Settings Activity how to navigate back using the arrow at the top

Hi I've created a settings Activity and when I am in the settings menu and press the back button of the phone i get directed to the "home screen" which is correct but when I am pressing the top arrow of the settings menu nothings happends, it seems to be just a button. 嗨我已经创建了一个设置活动,当我在设置菜单中并按下手机的后退按钮时,我将被定向到“主屏幕”,这是正确的,但是当我按下设置菜单的顶部箭头时没有发生的事情,它似乎只是一个按钮。 Please see imgur to see which arrow i mean. 请参阅imgur以查看我的意思。 Back arrow in the settings activity, press here. 在设置活动中返回箭头,按此处。 I've looked around in the java code and seems to have found the button? 我在java代码中环顾四周,似乎找到了按钮? All help is app reciated!! 所有帮助都是app reciated !!

Here is the whole java file of the settings menu. 这是设置菜单的整个java文件。

 public class SettingsActivity extends AppCompatPreferenceActivity { /** * A preference value change listener that updates the preference's summary * to reflect its new value. */ private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object value) { String stringValue = value.toString(); if (preference instanceof RingtonePreference) { // For ringtone preferences, look up the correct display value // using RingtoneManager. if (TextUtils.isEmpty(stringValue)) { // Empty values correspond to 'silent' (no ringtone). preference.setSummary(R.string.pref_ringtone_silent); } else { Ringtone ringtone = RingtoneManager.getRingtone( preference.getContext(), Uri.parse(stringValue)); if (ringtone == null) { // Clear the summary if there was a lookup error. preference.setSummary(null); } else { // Set the summary to reflect the new ringtone display // name. String name = ringtone.getTitle(preference.getContext()); preference.setSummary(name); } } } else { // For all other preferences, set the summary to the value's // simple string representation. preference.setSummary(stringValue); } return true; } }; /** * Helper method to determine if the device has an extra-large screen. For * example, 10" tablets are extra-large. */ private static boolean isXLargeTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE; } /** * Binds a preference's summary to its value. More specifically, when the * preference's value is changed, its summary (line of text below the * preference title) is updated to reflect the value. The summary is also * immediately updated upon calling this method. The exact display format is * dependent on the type of preference. * * @see #sBindPreferenceSummaryToValueListener */ private static void bindPreferenceSummaryToValue(Preference preference) { // Set the listener to watch for value changes. preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener); // Trigger the listener immediately with the preference's // current value. sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, PreferenceManager .getDefaultSharedPreferences(preference.getContext()) .getString(preference.getKey(), "")); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); } /** * Set up the {@link android.app.ActionBar}, if the API is available. */ private void setupActionBar() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { // Show the Up button in the action bar. actionBar.setDisplayHomeAsUpEnabled(true); } } /** * {@inheritDoc} */ @Override public boolean onIsMultiPane() { return isXLargeTablet(this); } /** * {@inheritDoc} */ @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void onBuildHeaders(List<Header> target) { loadHeadersFromResource(R.xml.pref_headers, target); } /** * This method stops fragment injection in malicious applications. * Make sure to deny any unknown fragments here. */ protected boolean isValidFragment(String fragmentName) { return PreferenceFragment.class.getName().equals(fragmentName) || GeneralPreferenceFragment.class.getName().equals(fragmentName); } /** * This fragment shows general preferences only. It is used when the * activity is showing a two-pane settings UI. */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class GeneralPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.pref_general); setHasOptionsMenu(true); // Bind the summaries of EditText/List/Dialog/Ringtone preferences // to their values. When their values change, their summaries are // updated to reflect the new value, per the Android Design // guidelines. bindPreferenceSummaryToValue(findPreference("example_text")); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == android.R.id.home) { startActivity(new Intent(getActivity(), SettingsActivity.class)); return true; } return super.onOptionsItemSelected(item); } } } 

I think this is the button? 我觉得这是按钮?

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupActionBar(); } /** * Set up the {@link android.app.ActionBar}, if the API is available. */ private void setupActionBar() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { // Show the Up button in the action bar. actionBar.setDisplayHomeAsUpEnabled(true); } } 

Open AndroidManifest.xml file. 打开AndroidManifest.xml文件。 You need to define parent Activity for your SettingsActivity using: 您需要使用以下内容为SettingsActivity定义父Activity

<meta-data android:name="android.support.PARENT_ACTIVITY"
  android:value=".MainActivity"/>

then in your class: 然后在你班上:

 /**
     * Set up the {@link android.app.ActionBar}, if the API is available.
     */
    private void setupActionBar() {
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            // Show the Up button in the action bar.
            actionBar.setDisplayHomeAsUpEnabled(true);
            actionBar.setDisplayShowHomeEnabled(true);
        }
    }

if you're using already AppCompatActivity with Toolbar , check this solution: 如果您已将AppCompatActivity与Toolbar ,请检查此解决方案:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// add back arrow to toolbar
if (getSupportActionBar() != null){
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

If you're also want to handle this event or change the backButton icon, go to: Display Back Arrow on Toolbar Android 如果您还想处理此事件或更改backButton图标,请转到: 工具栏Android上的显示后退箭头

Edit: add to your activity class this code: 编辑:将此代码添加到您的活动类:

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

    return super.onOptionsItemSelected(item);
}

Hope it will help 希望它会有所帮助

在AndroidManifest.xml中,将其添加到Activity标记中

<meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".HomeScreenActivity"/>

Combining the answers above 结合上面的答案

SettingsActivity.java SettingsActivity.java

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        onBackPressed();
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    this.finish();
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
}

AndroidManifest.xml AndroidManifest.xml中

<activity android:name=".SettingsActivity"
    android:label="@string/title_settings">
    <meta-data android:name="android.support.PARENT_ACTIVITY"
    android:value=".MainActivity"/>
</activity>

You Should try it. 你应该试试看。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // handle arrow click here
        if (item.getItemId() == android.R.id.home) {
            finish(); // close this activity and return to preview activity (if there is any)`enter code here`
        }

        return super.onOptionsItemSelected(item);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何通过重新启动它导航回活动? - How to navigate back to an activity with restarting it? 如何在没有按钮的情况下导航回主要活动 - How to navigate back to main activity without a button 如何使“菜单”或“清单”后退按钮导航回上一个活动 - How to make “menu” or “manifest” back button to navigate back to the previous activity 导航回后台活动 Android - Navigate back to a background activity Android 如何从导航抽屉选项卡导航回活动? - How to navigate back to activity from navigation drawer tabs? 如果单击后退按钮,如何着陆或导航到上一个活动 - How to land or navigate to previous activity if click on back button 如何在右上角的应用栏后退箭头上获得返回按钮(在设备上)之类的功能 - How to get Back button(on device) like functionality on app bar back arrow on top right corner 如何在Android中使用列表项单击导航到另一个活动 - How to navigate in to another activity using list item click in Android 如何使用两个微调器和onclick提交按钮导航到新活动? - How to navigate to new activity by using two spinners and onclick submit button? 如何不使用 Android 中的底部导航栏导航回某些片段 - How to not navigate back to certain fragments using a bottom navigation bar in Android
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM