我有一个列表适配器类,它填充了我的列表视图。但是如果我的列表由于某种原因是空的那么它只是空白。如何让它在列表中添加一个项目“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();
}
}
}
答案 0 :(得分:6)
ListView对此调用setEmptyView有一个特殊功能,您无需更改适配器。 在布局中创建另一个TextView,并在列表为空时显示要显示的消息。
然后在你的活动中:
View empty = findViewById(R.id.empty);
ListView list=(ListView)findViewById(R.id.list);
list.setEmptyView(empty);
答案 1 :(得分:0)
在您的活动布局中再添加一个textview。如果您的列表为空,则将可见性设置为可见,否则消失,无需更改适配器中的任何内容
答案 2 :(得分:0)
试试这个:
您可以将TextView设置为空视图,以指示用户列表为空
<TextView
android:id="@+id/empty_view"
android:layout_width="match_parent"
android:layout_height="60px"
android:text="@string/empty_text" />
mListView.setEmptyView(findViewById(R.id.empty_view));
其中string empty_text 的值类似于“List is Empty”