android – 具有自定义布局的ListFragment:始终显示空消息
作者:互联网
我使用默认的ArrayAdapter为ListFragment创建了一个自定义布局.我的问题是,当列表不为空时,每行显示空消息(当列表为空时,消息只按预期显示一次).
headline_list.xml(即我的自定义布局文件)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@id/android:list" />
<TextView android:id="@+id/my_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView android:id="@id/android:empty"
android:text="There are no data"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
HeadlineFragment.java
public class HeadlineFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.headline_list, container, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
List<String> headlines = ...; // populate headlines list
setListAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.headline_list, R.id.my_text, headlines));
}
}
解决方法:
你的布局有点混乱.
new ArrayAdapter<String>(getActivity(),
R.layout.headline_list, R.id.my_text, headlines)
ArrayAdapter构造函数中的第二个参数是单个行布局的ID,而不是整个Fragment布局.第三个参数引用行布局中的TextView以显示项目的数据.
您可以提供自己的行布局,也可以使用SDK提供的行布局.后者的一个例子:
new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, headlines)
在此示例中,android.R.layout.simple_list_item_1本身只是一个TextView,因此我们不需要为其提供ID.
此外,您应该考虑保留对适配器的引用,如果您需要稍后修改它.
看来你的意思是my_text TextView是你的自定义行布局.如果是这样,将其从Fragment的布局headline_list中删除,并将其放在自己的布局文件中;例如,list_row.xml.您的布局文件将如下所示:
headline_list.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="There are no data" />
</LinearLayout>
list_row.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
然后你会像这样实例化你的适配器:
new ArrayAdapter<String>(getActivity(), R.layout.list_row, headlines)
同样,由于行布局只是一个TextView,我们不需要在构造函数中传递一个ID.
标签:android-listfragment,android,android-arrayadapter 来源: https://codeday.me/bug/20190830/1766737.html