其他分享
首页 > 其他分享> > android – 如何使用自定义列表适配器显示listView为空

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