我正在拔头发试图弄清楚这一点。从我读过的所有教程中,我的设置方式应该可以工作。我有一个使用自定义适配器来显示一些数据的 ListActivity。如果适配器为空,我想显示“未找到任何项目”消息。
这是我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/BaseStyle"
android:orientation="vertical"
android:padding="5dip"
>
<ListView android:id="@android:id/list"
style="@style/BaseStyle"
/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/empty"
style="@style/BaseStyle.Title"
android:text="No Items Found"
/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
style="@style/BaseStyle.Title"
android:layout_alignParentTop="true"
/>
</RelativeLayout>
这是我的代码:
public class Main extends ListActivity {
private CustomAdapter adapter;
private String[] items = {};
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
adapter = new CustomAdapter();
PopulateItems();
for (String item : items)
adapter.addItem(item);
this.setListAdapter(adapter);
adapter.notifyDataSetChanged();
}
private class CustomAdapter extends BaseAdapter {
private String[] mData;
private LayoutInflater mInflater;
public CustomAdapter() {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(String item) {
mData.add(item);
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
String item = (String)this.getItem(position);
if (convertView == null)
{
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.main, parent, false);
holder.text = (TextView)convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
TextView tvText = holder.text;
tvText.setText(item);
}
static class ViewHolder {
TextView text;
}
当“items”字符串数组没有数据时,会发生“No Items Found”文本显示正常。PopulateItem() 方法中有一个过程,它将用数据填充数组,如果有数据,在列表的每一行上仍然可以看到“No Items Found”文本,即数据的“下方”。所以空文本基本上被数据覆盖了。