5

リスト ビューを満たすリスト アダプター クラスがあります。しかし、何らかの理由で私のリストが空の場合、それはただの空白です。「リストが空です」というリストにアイテムを追加するにはどうすればよいですか?

別のアイテムを追加すること、つまり、空のアイテム用に別のlayotuファイルを作成することでしたが、2種類のビューを使用する方法がわかりませんか?

現在、私のリストアダプターのコードは次のとおりです。

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();
    }
}

}

4

3 に答える 3

6

ListView には setEmptyView という特別な機能があります。アダプターを変更する必要はありません。リストが空のときに表示するメッセージを使用して、レイアウトに別の TextView を作成します。

次に、アクティビティで:

View empty = findViewById(R.id.empty);
ListView list=(ListView)findViewById(R.id.list);
list.setEmptyView(empty);
于 2013-09-07T06:20:49.930 に答える
0

アクティビティ レイアウトにもう 1 つテキストビューを追加します。リストが空の場合は、可視性を可視に設定します。それ以外の場合は、アダプターで何も変更する必要はありません

于 2013-09-07T06:15:05.857 に答える