如何在preferenceActivity中设置导航抽屉

2024-06-26

在我的应用程序中,我的每个活动都带有抽屉,但是当我在我的首选项活动中设置抽屉时,我的活动工作正常,但抽屉没有出现。

这是我的代码..

public class SettingActivity extends PreferenceActivity implements NavigationView.OnNavigationItemSelectedListener {
private AppCompatDelegate mDelegate;

private NavigationView mDrawer;
private DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;

@Override
public void onCreate(Bundle savedInstanceState) {
    getDelegate().installViewFactory();
    getDelegate().onCreate(savedInstanceState);

    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        android.app.Fragment infoFragment = new MyPreferenceFragment();
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment_container, infoFragment);
        ft.commit();
    }

}

public static class MyPreferenceFragment extends PreferenceFragment {

    private AppSettings settings;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref);
        Preference ringtonePrefs = findPreference("ringPref");
        ringtonePrefs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                preference.setSummary(String.valueOf(newValue));
                return true;
            }
        });

        Preference mapTypePrefs = findPreference("mapPref");
        mapTypePrefs.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {
                preference.setSummary(String.valueOf(newValue));
                return true;
            }
        });
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        settings = AppSettings.getSettings(getActivity());
        Preference ringtonPrefs = findPreference("ringPref");
        ringtonPrefs.setSummary(settings.getRingtone());

        Preference maptypePrefs = findPreference("mapPref");
        maptypePrefs.setSummary(settings.getMapType());
    }

    @Override
    public void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(sharedPrefsChangeListener);
    }

    @Override
    public void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(sharedPrefsChangeListener);
    }

    private final SharedPreferences.OnSharedPreferenceChangeListener sharedPrefsChangeListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
        @Override
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            settings.load();
        }
    };

}

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

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

}

public android.support.v7.app.ActionBar getSupportActionBar() {
    return getDelegate().getSupportActionBar();
}

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

@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);
    setContentView( view, new DrawerLayout.LayoutParams( DrawerLayout.LayoutParams.MATCH_PARENT, DrawerLayout.LayoutParams.MATCH_PARENT ) );
}

@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
    getDelegate().setContentView(view, params);
    super.setContentView(R.layout.navigation_view);

    setupDrawer();

    mDrawerLayout.addDrawerListener(mDrawerToggle);
    mDrawerLayout.post(new Runnable() {
        @Override
        public void run() {
            mDrawerToggle.syncState();
        }
    });
}

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

private void setupDrawer() {
    assert getSupportActionBar() != null;
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    mDrawer = (NavigationView) findViewById(R.id.mNavDrawer);
    assert mDrawer != null;
    mDrawer.setNavigationItemSelectedListener(this);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.string.DrawerOpen,
            R.string.DrawerClose){
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

    };

    mDrawerLayout.addDrawerListener(mDrawerToggle);
    mDrawerToggle.syncState();
}

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    Intent intent = null;
 /*   if (item.getItemId() == R.id.navigation_item_1) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
        intent = new Intent(MapsActivity.this, LocationList.class);
        intent.putExtra("longitude_key", longitude);
        intent.putExtra("latitude_key", latitude);
        intent.putExtra("place_name", placeName);
        intent.putExtra("place_address", address);
        startActivity(intent);
        return true;
    }*/
    if (item.getItemId() == R.id.navigation_item_2) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
        intent = new Intent(this, AboutUs.class);
        startActivity(intent);
        return true;
    }
    if (item.getItemId() == R.id.navigation_item_3) {
        mDrawerLayout.closeDrawer(GravityCompat.START);
        intent = new Intent(this, Help.class);
        startActivity(intent);
        return true;
    }
    if(item.getItemId() == R.id.navigation_item_4){
        mDrawerLayout.closeDrawer(GravityCompat.START);
        Intent i = new Intent(this, SettingActivity.class);
        startActivity(i);
        return true;
    }
    mDrawerLayout.closeDrawers();
    return true;
}

}

这是我的 navigation_view.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layoutS"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <FrameLayout
       android:id="@+id/fragment_container"
       android:layout_width="match_parent"
       android:layout_height="match_parent"></FrameLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/mNavDrawerS"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:itemIconTint="@color/ColorAccent"
        app:itemTextColor="@color/TextColor.DarkGray"
        app:headerLayout="@layout/drawer_header"
        app:menu="@menu/menu_drawer"/>

</android.support.v4.widget.DrawerLayout>

请告诉我我在这里缺少什么..或者告诉我任何其他方法。


在 Activity 的最低层次布局(默认为 content_main)中,添加一个名为fragment_container 的 FrameLayout。将宽度和高度设置为 match_parent。这里的技巧是创建你的片段,如下所示:

getFragmentManager()
.beginTransaction()                           
.replace(R.id.fragment_container, new MyFragment())
.commit();

因此,您基本上不会向屏幕添加片段,只需用片段替换预定义的布局即可。这可以防止有关抽屉和工具栏的问题。如果没有,请告诉我,以便我进一步调查。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在preferenceActivity中设置导航抽屉 的相关文章

随机推荐

  • JQuery .on("click") 在触摸设备上触发“mouseover”

    我在使用 JQuery 时遇到了不需要的行为 on click function 在触摸设备上 这是我的代码如下 Code team on mouseover teamMouseOver team on mouseout teamMouse
  • 如何使用 Google Drive SDK 访问“与我共享”根列表?

    在Google Drive SDK文档中 我不知道如何访问root其他人与我共享的文件 文件夹列表 知道吗 我尝试搜索不属于我的文件 这意味着使用以下参数查询文件 列表 q not me in owners 但这会返回其他人拥有的所有文件
  • 使用 XAMPP 在 Windows 10 中安装 go-pear.phar 时出错

    我在尝试安装时总是遇到错误go pear phar 这是点击后的错误Enter对这个问题1 13 all or Enter to continue 1 13 all or Enter to continue ERROR Please ent
  • lme4:如何指定 2 个与随机截距的相关性,而不添加随机斜率之间的相关性

    重新发布自stats stackexchange com https stats stackexchange com q 195385 33560 我试图在 R 的 lme4 包中指定一个模型 其中随机截距和随机斜率之间有 2 个相关性 但
  • 视图水平和垂直不明确且布局复杂

    我有一个UIViewController在我的故事板上有 2 个水平并排的子视图 我添加了约束来将前缘和后缘固定为常数 20 点 并添加了另一个约束来保持宽度相等 如果我假设以下内容 应该可以计算每个子视图需要的宽度 子视图不重叠 不存在其
  • 每 2 行交替添加一个 CSS 类

    我有一个像这样的表 table tr td Test td tr tr td Test td tr tr td Test td tr tr td Test td tr tr td Test td tr tr td Test td tr tr
  • 带有转义字符的 JavaCC 引用

    标记可以包含转义字符的带引号的字符串的常用方法是什么 这里有些例子 1 this is good 2 this is good 3 this is good 4 this is bad 5 this is bad 6 this is bad
  • 超时对“Future”进行排序

    我利用了TimeoutScheduler介绍于Scala Futures 内置超时 https stackoverflow com questions 16304471 scala futures built in timeout 但是 现
  • JavaScript 和 jQuery 以及句点的使用

    我很困惑在引用类名时何时使用类名之前的句点 在此示例中 为什么 active slide 类的第一次使用事先使用了句点 而其他两个则没有 var main function dropdown toggle click function dr
  • 如何使用 7zip powershell 包含文件和文件夹

    我试图让我的 powershell 脚本压缩一些文件和文件夹 目前 我可以使我的脚本要么压缩所有文件 不包含文件夹 要么压缩包含文件夹但到错误路径的所有文件 一个例子是 如果我有一个名为 wordpress 的文件夹 其中包含文件和一些子文
  • jQuery.remove(),分离 DOM 元素,但我仍然可以从代码中访问这些元素。如何避免泄漏?

    我知道 在具有大量 UI 元素且完全基于 Ajax 的应用程序中正确管理内存并不容易 在我的应用程序中 页面永远不会重新加载 但我想了解以下行为 我有一个根元素 一次必须附加一个子元素 将其视为根元素是应用程序容器 子元素是单个页面 每当我
  • 如何使用 Windows API 检索 HD 供应商/序列号

    我说的是physical磁盘驱动器 而不是卷 分区 逻辑驱动器 所以通常建议GetVolumeInformation函数不适用于我的情况 确切地说 我直接使用尚未分区的磁盘 我通过打开它的句柄CreateFile功能 hDisk Creat
  • 更改 SQL Server 中所有表的所有列的排序规则

    我导入了一个包含一些数据的数据库 以便与另一个数据库进行比较 目标数据库有排序规则Latin1 General CI AS并且源数据库有SQL Latin1 General CP1 CI AS 我确实将源数据库的排序规则更改为Latin1
  • 当内容悬停时变为粗体时防止表格扩展

    我正在处理一张表格 其中一个要求是每一行在悬停时变为粗体 我可以正常工作 但是当发生这种情况时 列的宽度会发生变化 有什么办法可以防止这种情况发生吗 table width 100 border 1px solid ccc margin t
  • 点击后如何等待页面加载

    下面是简单的 IE 自动化代码 只需输入订单号 例如1413105088和邮政编码始终是78759并单击 提交 按钮 然后从结果页面中获取跟踪号码 例如017136295201034并将它们放入 C 列 它按预期工作 但由于 IE 不太可靠
  • IE8:对象不支持此属性或方法

    我知道我的问题是已知的 我只是想不出解决问题的方法 然而 该代码可以在 chrome ff 和 safari 中运行 但不能在 ie6 8 中运行 我尝试调试代码并弹出以下内容 线路 272 错误 对象不支持此属性或方法 这是我的 js 文
  • 如何在Github操作中指定节点的路径?

    我正在尝试使用 Github 的 node js 工作流程在我的存储库上进行自动化测试 但是 我遇到了困难 因为节点是在子目录中设置的 而不是在存储库的根目录中 我一直在寻找一种方法来指定运行 npm 命令的目录 但没有找到任何答案 这是工
  • 将 csrf 令牌传递给 Stripe

    我正在使用 stripe js 进行条纹支付 我需要设置一个回调 webhook 来接收来自 stripe 的请求 由于 webhook 是通过 stripe 发布的 我已将其标记为csrf excempt 提出这个观点有什么风险吗csrf
  • 离线安装 android 很困难[已过时]

    我是非洲的一名学生 在我们的土地上 实际上存在缓慢且昂贵的互联网连接 这就是为什么每当我们听到 在线存储库 安装软件方法这个词时我们都会感到恐惧 该死 这通常意味着你必须去别处寻找 问题 如果没有将 Eclipse 连接到互联网 我无法安装
  • 如何在preferenceActivity中设置导航抽屉

    在我的应用程序中 我的每个活动都带有抽屉 但是当我在我的首选项活动中设置抽屉时 我的活动工作正常 但抽屉没有出现 这是我的代码 public class SettingActivity extends PreferenceActivity