1.listview万能适配器
package com.tts.hotelmanager.adapter;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import com.tts.hotelmanager.bean.ViewHoldItem;
public class Adapter<T> extends BaseAdapter {
public List<T> list;
private Context context;
private int layout;
public Adapter(Context context, int layout) {
this.context = context;
this.layout = layout;
list = new ArrayList<T>();
}
public void setData(List<T> list) {
this.list = list;
notifyDataSetChanged();
}
public void setClear() {
list.clear();
notifyDataSetChanged();
}
public void remove(T t) {
if (list.size() > 0 && list.contains(t)) {
list.remove(t);
}
notifyDataSetChanged();
}
public void removeInt(int i) {
if (list.size() > 0 && i < list.size()) {
list.remove(i);
}
notifyDataSetChanged();
}
public void setDataChar(T t) {
list.add(t);
this.notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public T getItem(int position) {
return (T)list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public List<T> getList() {
return list;
}
@Override
public View getView(int position, View view, ViewGroup arg2) {
ViewHoldItem vh = ViewHoldItem.get(context, position, view, layout,
arg2);
face.adapter(vh, list.get(position));
return vh.getViewHoldIitem();
}
public void setInterface(Interface1<T> face) {
this.face = face;
}
private Interface1<T> face;
public interface Interface1<T> {
public void adapter(ViewHoldItem viewHolder, T t);
}
}
2.MainActivity的代码
mAdapter = new Adapter<HashMap<String, String>>(this,
R.layout.item_comment_content);
mAdapter.setInterface(this);
mAdapter.setData(mCommentsDetailList);
mListView.setAdapter(mAdapter);
3.因为由于ListView和GridView都是可滑动的控件,所以需要自定义GridView,重写其onMeasure()方法。在该方法中使GridView的高为wrap_content的大小,否则GridView中 的内容只能显示很小一部分。item中GridView的布局代码
<com.tts.hotelmanager.adapter.NoScrollGridView
android:id="@+id/item_comment_content_gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp_20"
android:horizontalSpacing="10dp"
android:numColumns="5"
android:scrollbars="vertical"
android:verticalSpacing="10dp"
android:visibility="visible" />
4.自定义不可滑动的GridView
package com.tts.hotelmanager.adapter;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
public class NoScrollGridView extends GridView {
public NoScrollGridView(Context context) {
super(context);
}
public NoScrollGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 重写这个方法
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
5.在重写adapter的方法里面,获取服务器返回的图片路径,然后转换为String[]数组,然后遍历把每个图片uri对象存在arrayListForEveryGridView 里面,然后把数组放在GridViewAdapter 里面,通过GridViewAdapter 映射到gridView控件上面。
String imageAddress = hm.get("imageAddress");
hashMap = new HashMap<String, Object>();
arrayListForEveryGridView = new ArrayList<HashMap<String, Object>>();
if (!imageAddress.equals("")) {
String[] imageArray = imageAddress.split(",");
for (int i = 0; i < imageArray.length; i++) {
String uri = ConstantsMember.SHOW_PICTURE_URL + imageArray[i];
hashMap.put("image" + i, uri);
arrayListForEveryGridView.add(hashMap);
}
GridViewAdapter gridViewAdapter = new GridViewAdapter(
CheckCommentActivity.this, arrayListForEveryGridView);
gridView.setAdapter(gridViewAdapter);
}
6.
package com.tts.hotelmanager.adapter;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.tts.hotelmanager.R;
public class GridViewAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<HashMap<String, Object>> mList;
public GridViewAdapter(Context mContext,
ArrayList<HashMap<String, Object>> mList) {
super();
this.mContext = mContext;
this.mList = mList;
}
@Override
public int getCount() {
if (mList == null) {
return 0;
} else {
return this.mList.size();
}
}
@Override
public Object getItem(int position) {
if (mList == null) {
return null;
} else {
return this.mList.get(position);
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(this.mContext).inflate(
R.layout.item_check_comment_image, null, false);
holder.image = (ImageView) convertView
.findViewById(R.id.item_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
if (this.mList != null) {
HashMap<String, Object> hashMap = this.mList.get(position);
if (holder.image != null) {
String uri = hashMap.get("image" + position).toString();
if (uri != null) {
.crossFade().into(holder.image);
}
}
}
return convertView;
}
private class ViewHolder {
ImageView image;
}
}