listview中嵌套ratingbar,在上下滑动的过程中会出现 你点击后的ratingbar数值不断变化,布局复用造成的问题之一;
嵌套EditText说白了也是布局复用的问题,还有就是点击EditText时焦点跳走。
记录一下
代码:
private Context context;
Builder alDialog;
private int index = -1;
private String[]itemStr;
public CopyOfPublishCommentsAdapter(Context context) {
this.context = context;
itemStr=new String[5];
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ItemView itemView;
PublishCommentBean commentBean = entities.get(position);
if (null == convertView) {
convertView = LayoutInflater.from(context).inflate(
R.layout.surround_publish_comment_item, null);
itemView = new ItemView();
itemView.ratingBar1 = (RatingBar) convertView
.findViewById(R.id.ratingBar1);
itemView.contentEt = (EditText) convertView
.findViewById(R.id.et_content);
itemView.myGridView = (MyGridview) convertView
.findViewById(R.id.gv_currentpics);
itemView.submitTv = (TextView) convertView
.findViewById(R.id.submit_tv);
itemView.picIg = (ImageView) convertView
.findViewById(R.id.imageView1);
convertView.setTag(itemView);
} else {
itemView = (ItemView) convertView.getTag();
}
itemView.pos=position;
// itemView.contentEt.setTag(position);
itemView.ratingBar1.setTag(position);
itemView.ratingBar1.setRating(commentBean.getRating());
itemView.ratingBar1
.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar,
float rating, boolean fromUser) {
if (fromUser) {
entities.get((Integer) ratingBar.getTag()).setRating(
rating);
}
}
});
// itemView.contentEt.setText(commentBean.getContent());
itemView.contentEt.setText(itemStr[position]);
itemView.contentEt.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
if(arg0.length()>300){
ToastUtil.show("");
itemView.contentEt.setTextKeepState(arg0);
}else{
itemStr[itemView.pos] = arg0.toString();
}
}
});
Util.displayImage(context, commentBean.getGoodsPic(), itemView.picIg);
final AddPicAdapter adapter= commentBean.getPicAdapter();
adapter.setPos(position);
itemView.myGridView.setAdapter(adapter);
itemView.myGridView
.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent,
View view, int pos, long id) {
PublishCommentBean commentBean = entities.get(itemView.pos);
if (pos != commentBean.getList().size() - 1) {
delete(context, pos, commentBean.getList(),
adapter);
}
return true;
}
});
itemView.submitTv.setOnClickListener(new MyUpClick(position, context));
return convertView;
}
public class AddPicAdapter extends BaseAdapter {
private Context context;
private List<String> list;
private int pos;
public AddPicAdapter(Context context, List<String> list,int pos) {
this.context = context;
this.list = list;
this.pos=pos;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ItemView item = null;
if (view == null) {
item = new ItemView();
view = LayoutInflater.from(context).inflate(R.layout.ap_add_pic,
null);
item.iv_pic = (ImageView) view.findViewById(R.id.iv_pic);
item.tv_add = (TextView) view.findViewById(R.id.tv_add);
view.setTag(item);
} else {
item = (ItemView) view.getTag();
}
String value = list.get(position);
if (position != list.size() - 1) {
item.tv_add.setVisibility(View.GONE);
item.iv_pic.setVisibility(View.VISIBLE);
Util.displayImage(context, "file:///" + value, item.iv_pic);
} else {
item.iv_pic.setVisibility(View.GONE);
item.tv_add.setVisibility(View.VISIBLE);
item.tv_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (list.size() < 10) {
String photo = Constants.IMG_CACHE
+ Util.getStringToday() + ".jpg";
if (context instanceof SendMessageActivity) {
((SendMessageActivity) context)
.setPhotoName(Environment
.getExternalStorageDirectory()
+ photo);
} else if (context instanceof AddCommentsActivity) {
((AddCommentsActivity) context)
.setPhotoName(Environment
.getExternalStorageDirectory()
+ photo);
}else if(context instanceof PublicCommentAct){
((PublicCommentAct) context)
.setPhotoName(Environment
.getExternalStorageDirectory()
+ photo,pos);
}
Util.getPhoto(context, photo);
} else {
ToastUtil.show("最多添加9张图片~");
}
}
});
}
return view;
}
class ItemView {
public ImageView iv_pic;
public TextView tv_add;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public void setPos(int pos){
this.pos=pos;
}
}
public class MyGridview extends GridView {
public MyGridview(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridview(Context context) {
super(context);
}
public MyGridview(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}