android – 如何使用自定义列表适配器显示listView为空
作者:互联网
我有一个列表适配器类填充列表视图.但是如果我的列表由于某种原因是空的那么它只是空白.如何让它在列表中添加一个项目“list is empty”?
我可能会添加另一个项目,即为空项目制作不同的layotu文件,但我不知道如何使用两种类型的视图?
这是我的列表适配器当前的代码:
public class MyOrdersAdapter extends BaseAdapter {
private GlobalObjects global;
private Context mContext;
private String TAG = "MyOrdersAdapter";
private boolean listIsEmpty = true;
// Keep all Objects in array
public ArrayList<MyOrdersItem> orders;
/**
* Constructor for creating a menu category
*
* @param c
* the context of the class calling this class
* @param _global
* the reference to the global object
*/
public MyOrdersAdapter(Context c, GlobalObjects _global) {
mContext = c;
global = _global;
orders = new ArrayList<MyOrdersItem>();
listIsEmpty = true;
JSONArray ordersObj = getCategoriesFromServer();
if (ordersObj != null) {
putOrdersIntoArray(ordersObj);
} else {
// Orders is null
Log.e(TAG, " Orders is null, which means the server did not return anything");
}
}
@Override
public int getCount() {
return orders.size();
}
@Override
public Object getItem(int position) {
return orders.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public ArrayList<MyOrdersItem> getOrders() {
return orders;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.my_order_item, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.my_order_item_textView_img);
holder.txtName = (TextView) convertView.findViewById(R.id.my_order_item_textView_name);
holder.txtQuantity = (TextView) convertView.findViewById(R.id.my_order_item_textView_quantity);
holder.txtPrice = (TextView) convertView.findViewById(R.id.my_order_item_textView_price);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Temp variable to store the current menu category item
final MyOrdersItem orderItem = (MyOrdersItem) getItem(position);
loadImgFromServer(orderItem.getProductId(), holder.imageView);
holder.txtName.setText(orderItem.getName());
holder.txtQuantity.setText(orderItem.getQuantity());
holder.txtPrice.setText(orderItem.getPrice());
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "Deleting order in position : " + position);
deleteOrder(orders.get(position));
orders.remove(position);
}
});
return convertView;
}
/**
* Loads the related image from the server into the ImageView for the specific item
*/
private void loadImgFromServer(String id, ImageView img) {
// Log.i(TAG, "Loading Image with product id: " + id);
int width = 80;
int height = 80;
String url = global.getBaseUrl() + "client/product/image/" + id + "/" + width + "/" + height;
UrlImageViewHelper.setUrlDrawable(img, url, R.drawable.loading_icon, global.getImageCacheTime());
Log.i(TAG, " IMAGE URL: " + url);
}
/**
* Private View holder class Keeps a reference to the View for the certain components.
* Is used to increase performance of the listView
*/
private class ViewHolder {
ImageView imageView;
TextView txtName;
TextView txtQuantity;
TextView txtPrice;
}
/**
* Parses the JSON object and builds an array of MenuCategories
*
* @return
*/
private void putOrdersIntoArray(JSONArray categoryList) {
try {
for (int i = 0; i < categoryList.length(); i++) {
JSONObject tmpObj = categoryList.getJSONObject(i);
String id = tmpObj.getString("productId");
String name = tmpObj.getString("productName");
String quantity = tmpObj.getString("quantity");
String price = tmpObj.getString("productPrice");
MyOrdersItem tmpOrder = new MyOrdersItem(id, name, quantity, price);
orders.add(tmpOrder);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
解决方法:
ListView有一个特殊的函数,用于调用setEmptyView,您不需要更改适配器.
在布局中创建另一个TextView,并在列表为空时显示要显示的消息.
然后在你的活动中:
View empty = findViewById(R.id.empty);
ListView list=(ListView)findViewById(R.id.list);
list.setEmptyView(empty);
标签:android,listview,listadapter 来源: https://codeday.me/bug/20190517/1121547.html