sig*_*ger 3 android android-listview
我正在尝试修改现有代码,而不是Android新手.如果我正在解释的任何概念或假设在这个世界上没有意义,请告诉我!
我的目标是为XML列表视图的空视图定义布局.今天,我们通过编程调整onActivityCreated我的CustomListFragment派生的默认空视图来实现此功能ListFragment:
setEmptyText(getResources().getString(R.string.listview_empty));
TextView emptyTextView = (TextView) getListView().getEmptyView();
emptyTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.listview_empty_text_size));
emptyTextView.setTextColor(getResources().getColor(R.color.listview_empty_text));
Run Code Online (Sandbox Code Playgroud)
我宁愿用XML定义我的空视图的样式.它更干净,我可以使用自定义布局,而现在它只允许一个字符串.
它似乎依赖于默认的listview布局(因为我inflate在片段代码中找不到任何内容),其中包含空文本视图,进度指示器等.我试图提供我的自定义布局; 这是我的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="No items to show."/>
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
现在我覆盖onCreateView了我的CustomListFragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.custom_listview, container, false);
return view;
}
Run Code Online (Sandbox Code Playgroud)
我删除了上面发布的代码片段onActivityCreated.
现在,我得到一个崩溃,因为ListFragment的mProgressContainer为空.它最初设置ensureList()为:
mProgressContainer = root.findViewById(INTERNAL_PROGRESS_CONTAINER_ID);
Run Code Online (Sandbox Code Playgroud)
我应该在自定义布局中定义"Progress Container"控件吗?在我看来,这不是正确的方法,因为我需要给它id一套INTERNAL_PROGRESS_CONTAINER_ID.
我为空文本情况提供自定义XML定义视图的推荐方法是什么?
您需要使用setEmptyView而不是setEmptyText.
此相关问题和答案显示如何使用您可以使用/sf/answers/1119366881/设置的自定义视图setEmptyView
总结是做类似的事情:
// if you're using a ListFragment
// do this inside onActivityCreated
View emptyView = getActivity().getLayoutInflater().inflate(R.layout.empty_view, null);
((ViewGroup)getListView().getParent()).addView(emptyView);
getListView().setEmptyView(emptyView);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4406 次 |
| 最近记录: |