2010-11-03 43 views
31

我有一个ListView,可以有0自定义项目里面(如“我的下载”)。Android ListView:当没有项目时的默认文本

有无论如何显示默认文本“没有下载”?

谢谢!

编辑:这里是我的解决方案,

TextView emptyView = new TextView(getApplicationContext()); 
emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
emptyView.setTextColor(R.color.black); 
emptyView.setText(R.string.no_purchased_item); 
emptyView.setTextSize(20); 
emptyView.setVisibility(View.GONE); 
emptyView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL); 

((ViewGroup)getListView().getParent()).addView(emptyView); 
getListView().setEmptyView(emptyView); 

alt text

+0

为什么View.GONE财产设置? – medonja 2016-10-24 13:50:00

+1

@medonja因为如果不首先将emptyView添加到视图层次结构中,setEmptyView(emptyView)方法无法正常工作,但这样做会使emptyView始终可见。所以你必须把它变成GONE,这个工作很好,因为setEmptyView()所做的只是根据列表的空状态来改变emptyView的可见性。 – tomalf2 2017-01-01 21:00:26

回答

36
public void setEmptyView (View emptyView) 

Since: API Level 1 
Sets the view to show if the adapter is empty 

叫上你的ListView实例。

E.g. mListView.setEmptyView(someView);

您可以即时创建视图,或者从xml中膨胀一个视图。

1

还有另一种BaseAdapter方法isEnabled()。您需要创建自己的适配器,它将返回某些元素isEnabled(int position)为false。在这种情况下,这些元素将不可选。修改列表很容易,只需添加一个禁用的元素即可。

但可以肯定的方法,通过亚历克斯·奥尔洛夫上述更好

16

除非我误解你的问题,你也可以只用的ID指定任何视图元素:在您的布局和它“@android ID /空”将自动照顾你。例如:

<ListView android:id="@android:id/list" android:layout_width="fill_parent" 
    android:layout_height="fill_parent" android:visibility="visible"/> 

<LinearLayout android:id="@android:id/empty" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:gravity="center"> 

    <TextView android:text="@string/no_messages" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     style="@style/textBoldLight"> 
    </TextView> 

</LinearLayout> 
+0

我没有想过给线性布局的空白ID以“找不到物品”为好。 – 2013-12-13 02:25:45

+6

这只适用于'ListActivity'。您需要将Alex的方法用于其他“Activity”类。 – 2014-05-22 20:46:01

0

如果您使用Activity代替ListActivity和希望(水平和垂直)设置的空对中心的严重性,你应该使用这些:

在您的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <ListView 
     android:id="@+id/contacts" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <LinearLayout 
     android:id="@android:id/empty" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/no_contacts_add_one"> 
     </TextView> 

    </LinearLayout> 


</LinearLayout> 

在你的活动:

ListView contacts = (ListView) view.findViewById(R.id.contacts); 
contacts.setEmptyView(view.findViewById(android.R.id.empty));