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)
实际结果:
如您所见,您可以直观地了解我的偏好.我做错了什么?
像这样创建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的建议编辑,即使对主题不是非常必要.
我遇到了同样的问题并解决了它//无需开始新的活动//.此方法的优点是您的主要活动不会经历暂停 - 恢复周期.关键是将主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)
这是:
将以下代码添加到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)
最终通过一个非常简单的修复修复了它。
我只是简单地调用了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)
就这样。设置首选项后,只需按后退按钮即可完成。
归档时间: |
|
查看次数: |
10202 次 |
最近记录: |