加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用onOptionsItemSelected从PreferenceArag和Preferenc

发布时间:2020-12-15 04:30:37 所属栏目:Java 来源:网络整理
导读:我在使用 Android Studio默认的“设置活动”(扩展AppCompatPreferenceActivity)时使用onOptionsItemSelected时遇到了麻烦.活动的重要部分是: public class SettingsActivity extends AppCompatPreferenceActivity { @Override protected void onCreate(Bund
我在使用 Android Studio默认的“设置活动”(扩展AppCompatPreferenceActivity)时使用onOptionsItemSelected时遇到了麻烦.活动的重要部分是:

public class SettingsActivity extends AppCompatPreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setupActionBar();
    }

    private void setupActionBar() {
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            // Show the Up button in the action bar.
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }

    public static class GeneralPreferenceFragment extends PreferenceFragment {

        // [...]

        @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);
        }
    }

    // two more fragments
}

这对于片段非常有用 – onOptionsItemSelected @Overrides很好用,返回到SettingsActivity,但是当使用向上按钮时,我希望SettingsActivity将控制权返回给它的父活动.

我读过the documentation,我明白了

Although your fragment receives an on-item-selected callback for each menu item it adds,the activity is first to receive the respective callback when the user selects a menu item.

这意味着我不能简单地将类似的@Override(使用不同的Intent)添加到SettingsActivity本身来处理我想要的情况,以免片段返回到父活动.

我试过通过AndroidManifest.xml处理这个:

<activity
    android:name=".SettingsActivity"
    android:label="@string/title_activity_settings"
    android:parentActivityName=".BlahBlahActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.appthing.BlahBlahActivity" />
</activity>

但这似乎根本没有做任何事情.

如果有的话,处理这个问题的好方法是什么?

解决方法

在Android Studio onOptionsItemSelected方法创建的模板中属于片段.

我通过评论它们并为重写onBackPressed的活动编写onOptionsItemSelected方法来解决

@Override
public void onBackPressed() {
    super.onBackPressed();
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读