枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述当ListView为空时Android显示文本相关的知识,希望能为你提供帮助。
我正在用TextView
设置一个@android:id/empty
,以便在ListView
中没有项目时显示消息。然而,即使在TextView
中有物品出现之前,这个ListView
也会显示出来。
我怎样才能使它只在ListView
中没有元素时显示?
<
?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="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:dividerHeight="1dp" >
<
/ListView>
<
TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/empty_list" />
<
/LinearLayout>
PS:我正在使用
Loader
和SimpleCursorAdapter
和ListFragment
。答案我猜你使用的是常规的
Fragment
或Activity
,里面有ListView
。如果是,则必须手动将空布局添加到ListView
。EG
ListView lv = (ListView)findViewById(android.R.id.list);
TextView emptyText = (TextView)findViewById(android.R.id.empty);
lv.setEmptyView(emptyText);
然后当你的适配器为空时,你的
ListView
会自动使用这个视图如果您使用的是
ListActivity
,则无需在setEmptyView()
上调用ListView
,因为ListActivity
会自动为您管理。另一答案当
TextView
为空时,设置一个ListView
并为其指定任何想要显示的内容:ProjectListAdapter projectListAdapter = new ProjectListAdapter();
TextView empty=(TextView)findViewById(R.id.empty);
projectsListView.setEmptyView(empty);
在我的xml文件中,我们编写以下代码
<
TextView
android:id="@+id/empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="Your text here"
android:textColor="#FFFFFF" />
另一答案我有这个问题。您必须在代码中显式设置emptyView。
改变你的
TextView
:<
TextView
android:id="@+id/emptyResults"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/empty_list" />
然后在
onCreate()
:listViewResults = (ListView) findViewById(R.id.list);
listViewResults.setEmptyView((LinearLayout) findViewById(R.id.emptyResults));
上面的代码假设您的
ListView
在LinearLayout
中。另一答案我使用
ListFragment
并遇到了同样的问题。我尝试了这个答案的所有变种,但问题没有解决。所以我找到了我的变体,以覆盖
setEmptyText()
:public class NewsFragment extends ListFragment{
private TextView emptyText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//...emptyText = (TextView)view.findViewById(android.R.id.empty);
//...
}@Override
public void setEmptyText(CharSequence text) {
emptyText.setText(text);
}
}
希望它会对某人有所帮助。
另一答案我知道这有点晚了,但是要使用XML工作,你需要加重你的
ListView
并让你的TextView
match_parent<
?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="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:dividerHeight="1dp" >
<
/ListView>
<
TextView
android:id="@android:id/empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/empty_list" />
<
/LinearLayout>
另一答案【当ListView为空时Android显示文本】有一个good example如何做它工作真棒:
如果要在ListView
为空时向用户显示消息,则必须记住以下3个步骤:
1-创建一个xml,它将保存
- 在声明
ListView
的xml中,在TextView
正下方创建一个LinearLayout
(如果需要,TextView可以在ListView
内)- 将
TextView
的id设置为“emptyElement”- 在活动中,将
setEmptyView()
属性设置为ListView
ListView
并将其命名为“my_activity”,并将其命名为“MyActivity”。
重要说明:TextView必须具有以下名称:“空元素”。此名称是必填项。如果您使用其他名称,则不会显示该消息。
- 现在,在刚创建的xml“my_activity”中,您必须设置
ListView
。在ListView
正下方,你将不得不添加一个TextView
。这将用于显示空消息。
这就是“my_activity”xml应该是这样的:
< RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MyActivity"> < ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listView"/> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/emptyElement" android:text="The list is empty" android:textStyle="bold" android:textSize="15sp" android:visibility="gone" android:layout_centerInParent="true" android:textColor="@android:color/darker_gray"/> < /RelativeLayout>
- 创建一个用于显示项目的xml(当列表不为空时),并将其命名为“list_item”。
< TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/list_item_text_view" android:textSize="20sp" android:padding="10dp" android:layout_marginLeft="5dp"/>
- 为自定义适配器创建一个新的java类,ListView将使用它并命名为“MyCustomAdapter”。适配器的代码如下:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; public class MyCustomAdapter extends BaseAdapter { private ArrayList< String> mListItems; private LayoutInflater mLayoutInflater; public MyCustomAdapter(Context context, ArrayList< String> arrayList){mListItems = arrayList; //get the layout inflater mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); }@Override public int getCount() { //getCount() represents how many items are in the list return mListItems.size(); }@Override //get the data of an item from a specific position //i represents the position of the item in the list public Object getItem(int i) { return null; }@Override //get the position id of the item from the list public long getItemId(int i) { return 0; }@Overridepublic View getView(int position, View view, ViewGroup viewGroup) {// create a ViewHolder reference ViewHolder holder; //check to see if the reused view is null or not, if is not null then reuse it if (view == null) { holder = new ViewHolder(); view = mLayoutInflater.inflate(R.layout.list_item, null); holder.itemName = (TextView) view.findViewById(R.id.list_item_text_view); // the setTag is used to store the data within this view view.setTag(holder); } else { // the getTag returns the viewHolder object set as a tag to the view holder = (ViewHolder)view.getTag(); }//get the string item from the position "position" from array list to put it on the TextView String stringItem = mListItems.get(position); if (stringItem != null) { if (holder.itemName != null) { //set the item name on the TextView holder.itemName.setText(stringItem); } }//this method must return the view corresponding to the data at the specified position. return view; }/** * Static class used to avoid the calling of "findViewById" every time the getView() method is called, * because this can impact to your application performance when yourlist is too big. The class is static so it * cache all the things inside once it's created. */ private static class ViewHolder {protected TextView itemName; } }
- 现在转到
推荐阅读
- Android - onClick Listview项目显示描述和窗口/视图/页面中的链接
- Android Studio Project(UI的底部被切断)
- 特定号码的SMS消息未显示在其他Android设备上
- Android - 突出显示TextView中的单词()
- 带网格标题的Android网格视图
- 使用Material Design在Android Lollipop中的ListView中的活动过渡动画
- 如何解决Visual Studio Form Render异常(可以设计Form类,但不是文件中的第一类)
- 如何在WinForms中使用C#在Windows的System32目录中运行任何可执行文件
- 跨平台与单平台开发-这是你应该知道的