PreferenceFragment透明显示

San*_*eer 12 android android-preferences android-fragments

PreferenceFragment在ActionBar中选择Preferences选项后试图显示.但是,在用PreferenceFragment您更换当前内容后,您可以看到它下面的旧内容.在中,您可以直接看到偏好.

我在这里错过了什么吗?我使用了我自己的一本书中的一个例子,它没有使用任何布局文件作为首选项.你需要那些吗?

二手代码:

操作栏菜单

private boolean MenuChoice(MenuItem item) {
        switch (item.getItemId()) {
        case 0:
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction =
            fragmentManager.beginTransaction();
            ReaderPreferences prefs = new ReaderPreferences();
            fragmentTransaction.replace(android.R.id.content, prefs);
            fragmentTransaction.addToBackStack(null);
            fragmentTransaction.commit();
            return true;

        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

PreferenceReader

public class ReaderPreferences extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // --load the preferences from an XML file---
        addPreferencesFromResource(R.xml.preference);
    }
  }
Run Code Online (Sandbox Code Playgroud)

实际结果:

在此输入图像描述

如您所见,您可以直观地了解我的偏好.我做错了什么?

And*_*tto 8

像这样创建PreferenceFragment.java类:

    public class UserPreferenceFragment extends PreferenceFragment {

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

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        getView().setBackgroundColor(Color.BLACK);
        getView().setClickable(true);
    }

}
Run Code Online (Sandbox Code Playgroud)

诀窍是:

@Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            getView().setBackgroundColor(Color.BLACK);
            getView().setClickable(true);
        }
Run Code Online (Sandbox Code Playgroud)

编辑:

按照JDenais的建议编辑,即使对主题不是非常必要.


CjS*_*CjS 6

我遇到了同样的问题并解决了它//无需开始新的活动//.此方法的优点是您的主要活动不会经历暂停 - 恢复周期.关键是将主UI作为片段,然后在调用Pref片段时隐藏它.主要片段可以静态或动态包含.

 FragmentTransaction ft = getFragmentManager().beginTransaction();
 AppSettingsFragment prefs = new AppSettingsFragment();
 // This adds the newly created Preference fragment to my main layout, shown below
 ft.add(R.id.main_layout,prefs);
 // By hiding the main fragment, transparency isn't an issue
 ft.hide(mMyMainFragment);
 ft.addToBackStack(null);
 ft.commit();
Run Code Online (Sandbox Code Playgroud)

main_layout.xml样子:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Uncomment for static fragment inclusion -->
<!-- fragment android:name="com.legynd.ui.MyMainFragment"
    android:id="@+id/mainfragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" / -->
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)


Scr*_*eer 6

这里回答最好,最便携的解决方案

这是:

将以下代码添加到PreferenceFragment将允许您添加背景颜色,图像等.

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = super.onCreateView(inflater, container, savedInstanceState);
    view.setBackgroundColor(getResources().getColor(android.R.color.your_color));

    return view; }
Run Code Online (Sandbox Code Playgroud)


San*_*eer 0

最终通过一个非常简单的修复修复了它。

我只是简单地调用了PreferenceFragment一个 new Intent,它工作得很好。

对于有同样问题的人:

首选项.java

public class ReaderPreferences extends PreferenceActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // --load the preferences from an XML file---
            addPreferencesFromResource(R.xml.preference);
        }
Run Code Online (Sandbox Code Playgroud)

在我的主屏幕中按下按钮时:

Intent i = new Intent(this, Prefs.class);
            startActivity(i);
Run Code Online (Sandbox Code Playgroud)

就这样。设置首选项后,只需按后退按钮即可完成。

  • 如果您使用 PreferenceActivity,此解决方案可以正常工作,但是,您不能将此方法与 PreferenceFragment 一起使用。您说您正在通过 Intent 调用 PreferenceFragment,但在 Prefs.java 的解决方案中您使用的是 PreferenceActivity 而不是 PreferenceFragment。 (9认同)