ListView中显示RatingBar

来源:互联网 发布:php 创建log文件 编辑:程序博客网 时间:2024/06/05 19:40

历尽几个小时的战斗,终于胜利了,listView里面添加了一个RatingBar,但是最后就是没有显示,调来调去,原来是布局文件里面出了问题,问题出在RatingBar显示的位置太小不能显示所以就没有显示出来,我这个布局在RatingBar控件上面还有一个TextView控件,它们是水平排列的,我把TextView里面宽度设置成了android:layout_width="fill_parent",就没有显示出来,然后改成了android:layout_width="wrap_content"就显示出来了,哎,弄了头天还原是这个原因。。。


下面是自己重写的一个MySimpleAdapter,测试了没有问题

import java.util.List;
import java.util.Map;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Checkable;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.SimpleAdapter;
import android.widget.TextView;


public class MySimpleAdapter extends SimpleAdapter {
private int[] mTo;
private String[] mFrom;
private ViewBinder mViewBinder;
private List<? extends Map<String, ?>> mData;
private int mResource;
private int mDropDownResource;
private LayoutInflater mInflater;
private int p = 0;


public MySimpleAdapter(Context context,
List<? extends Map<String, ?>> data, int resource, String[] from,
int[] to) {
super(context, data, resource, from, to);
mData = data;
mResource = mDropDownResource = resource;
mFrom = from;
mTo = to;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}


/**
* @see android.widget.Adapter#getView(int, View, ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
return createViewFromResource(position, convertView, parent, mResource);
}


private View createViewFromResource(int position, View convertView,
ViewGroup parent, int resource) {
View v;


if (convertView == null) {
v = mInflater.inflate(resource, parent, false);


final int[] to = mTo;
final int count = to.length;
final View[] holder = new View[count];


for (int i = 0; i < count; i++) {
holder[i] = v.findViewById(to[i]);
}


v.setTag(holder);
} else {
v = convertView;
}

bindView(position, v);


return v;
}


private void bindView(int position, View view) {
final Map dataSet = mData.get(position);
if (dataSet == null) {
return;
}
final ViewBinder binder = mViewBinder;
final View[] holder = (View[]) view.getTag();
final String[] from = mFrom;
final int[] to = mTo;
final int count = to.length;


for (int i = 0; i < count; i++) {
final View v = holder[i];
if (v != null) {
final Object data = dataSet.get(from[i]);
String text = data == null ? "" : data.toString();
if (text == null) {
text = "";
}
boolean bound = false;
if (binder != null) {
bound = binder.setViewValue(v, data, text);
}
if (!bound) {
if (v instanceof Checkable) {
if (data instanceof Boolean) {
((Checkable) v).setChecked((Boolean) data);
} else {
throw new IllegalStateException(v.getClass()
.getName()
+ " should be bound to a Boolean, not a "
+ data.getClass());
}
} else if (v instanceof TextView) {
// Note: keep the instanceof TextView check at the
// bottom of these
// ifs since a lot of views are TextViews (e.g.
// CheckBoxes).
// setViewText((TextView) v, text);
((TextView) v).setText(text);
} else if (v instanceof ImageView) {
if (data instanceof Integer) {
setViewImage((ImageView) v, (Integer) data);
} else if (data instanceof byte[]) { // 备注1
Bitmap bmp;
byte[] image = (byte[]) data;
if (image.length != 0) {
bmp = BitmapFactory.decodeByteArray(image, 0,
image.length);
((ImageView) v).setImageBitmap(bmp);
}
}
} else if (v instanceof RatingBar) {
float score = Float.parseFloat(data.toString()); // 备注2
((RatingBar) v).setRating(score);
} else {
throw new IllegalStateException(
v.getClass().getName()
+ " is not a "
+ " view that can be bounds by this SimpleAdapter");


}
}
}
}
}


public void setViewImage(ImageView v, int value) {
v.setImageResource(value);
}
}


原创粉丝点击