在自定义偏好设置中,在onCreateView中加载布局

10

在onCreateView调用期间,我能否从XML中加载布局?我尝试了:

  • setLayoutResource(R.layout.test);
  • setWidgetLayoutResource(R.layout.test);

但是这会导致程序崩溃,我不知道从方法参数中返回一个ViewGroup parent。 我还尝试过:

  • View view = View.inflate(getContext(), R.layout.test, parent),但它也没有起作用。

我将根布局命名为widget_frame,但这并没有起到作用。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent" 
 android:padding="1dp" android:clickable="false" android:id="@+id/widget_frame">
 <LinearLayout ....

你能告诉我我做错了什么,或者指向一些有效的示例吗?谢谢。

更新

下面是一个可行的解决方案,用于填充上述布局:

    LayoutInflater inflater =  (LayoutInflater)getContext().
                              getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.test, parent, false);

太好了!这对我也起作用了!但是文档有点令人困惑,因为它说:“默认行为是膨胀此首选项的主布局(请参见setLayoutResource(int)”。我不明白调用setLayoutResource的目的是什么,因为我们显然需要返回一个View,而setLayoutResource返回void。 - Bilthon
如果你想使用setLayoutResource来设置布局,你的视图ID应该是"@android:id/widget_frame"而不是"@+id/widget_frame" - GDanger
2个回答

2
如果您正在使用onCreateView,我猜您要么使用了fragment,要么扩展了View。无论如何,请检查以下内容:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.your_layout, container);
}

0
如果您正在填充一个布局,应该像这样做:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     return inflater.inflate(R.layout.your_layout, null);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接