从AlertDialog创建的ListView的setEmptyView

时间:2013-10-29 16:20:20

标签: android listview dialog android-alertdialog

我正在尝试将setEmptyView()方法用于通过ListView AlertDialog方法创建的builder。由于ListView是由builder创建的,因此我认为我应该能够对视图进行充气,例如my_empty_view.xml,并获取对话框ListView的实例并设置相应的空视图,即

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
View myEmptyView = inflater.inflate(R.layout.my_empty_view.xml, null);

// Alert Dialog Code Here
dialog = builder.create();
ListView listView = dialog.getListView();
listView.setEmptyView(myEmptyView);

虽然这不会引发任何错误,但是当适配器为空时它不会给出空视图。关于我做错了什么的想法?

1 个答案:

答案 0 :(得分:0)

因此,在使用构建器的SetEmptyView方法在AlertDialog构建器中设置适配器后,我不确定是否可以设置setAdapter

但是,我通过在同一个xml文件中定义ListView和我的空视图(例如TextView且可见性设置为已消失)来解决此问题,例如,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center">

<ListView
    android:id="@+id/my_list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="multipleChoice"
    android:layout_marginLeft="25dp"
    android:layout_marginRight="25dp"/>


    <TextView
        android:id="@+id/my_empty_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Searching for devices..."
        android:layout_gravity="center"
        android:textSize="16sp"
        android:paddingTop="50dp"
        android:paddingBottom="50dp"
        android:visibility="gone"/>


</LinearLayout>

我在我的扩展OnCreateDialog类的DialogFragment方法中夸大了此视图组(如创建自定义布局下的documentation中所述),即,

View myDialogView = inflater.inflate(R.layout.my_dialog_view, null);

从膨胀的视图中检索对ListView的引用和空视图,即

ListView myListView = (ListView) myDialogView.findViewById(R.id.my_list_view);
TextView myEmptyView = (TextView) myDialogView.findViewById(R.id.my_empty_view);

使用这些设置列表视图setemptyView,即

myListView.setEmptyView(myEmptyView);

设置我的适配器

myListView.setAdapter(yourAdapter);

然后在构建器中只使用setView()方法

.setView(myDialogView)

这可能是最好的方法。我被android文档抛出,它建议使用setAdapter构建器中的AlertDialog方法。就个人而言,我认为坚持使用setView方法可以提供更大的灵活性。