首先,我正在使用Android Compatibility Library V4 rev.3 for 1.6(Donut)
当你第一次创建一个ListFragment时,它会显示一个不确定的进度指示器,直到你使用setListAdabpter()。根据ListFragment.onCreateView的文档,如果我想使用自定义布局:
如果你用自己的自定义内容重写此方法,请考虑在布局文件中包含标准布局{@link android.R.layout#list_content},以便继续保留ListFragment的所有标准行为。特别是,这是目前唯一能够显示内置的不确定进度状态的方法。
问题是,当我进入我的布局文件,并尝试: <include layout="@android:layout/list_content" ...>
它(日食)告诉我
资源不公开。(在'布局'值'@android:layout / list_content')。
我认为这意味着list_content.xml
在我的V4源代码中不存在。这是正确的,因为根据文档它出现在API v11中。
我只是假定它会存在于兼容性库源代码中,不知道它是否存在...
我能看到的唯一的其他解决方案是挖掘android的API V11源代码并复制和粘贴list_content.xml
。这是唯一的解决方案吗?
发布于 2018-05-16 14:01:47
兼容库中的ListFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final Context context = getActivity();
FrameLayout root = new FrameLayout(context);
// ------------------------------------------------------------------
LinearLayout pframe = new LinearLayout(context);
pframe.setId(INTERNAL_PROGRESS_CONTAINER_ID);
pframe.setOrientation(LinearLayout.VERTICAL);
pframe.setVisibility(View.GONE);
pframe.setGravity(Gravity.CENTER);
ProgressBar progress = new ProgressBar(context, null,
android.R.attr.progressBarStyleLarge);
pframe.addView(progress, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
root.addView(pframe, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
// ------------------------------------------------------------------
FrameLayout lframe = new FrameLayout(context);
lframe.setId(INTERNAL_LIST_CONTAINER_ID);
TextView tv = new TextView(getActivity());
tv.setId(INTERNAL_EMPTY_ID);
tv.setGravity(Gravity.CENTER);
lframe.addView(tv, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
ListView lv = new ListView(getActivity());
lv.setId(android.R.id.list);
lv.setDrawSelectorOnTop(false);
lframe.addView(lv, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
root.addView(lframe, new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
// ------------------------------------------------------------------
root.setLayoutParams(new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
return root;
}
Android 4.0的ListFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(com.android.internal.R.layout.list_content, container, false);
}
发布于 2018-05-16 15:10:56
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View listContent = super.onCreateView(inflater, container,
savedInstanceState);
View v = inflater.inflate(R.layout.my_custom_layout, container,
false);
FrameLayout listContainer = (FrameLayout) v.findViewById(R.id.my_list_container);
listContainer.addView(listContent);
return v;
}
https://stackoverflow.com/questions/-100004503
复制相似问题