我想使用Custom BaseAdapter制作自定义ListView,其中status = 1,我想显示一个CheckBox,否则我想显示一个textView ..
<小时/> 我给出的条件是:
if (NewtheStatus == 1) {
alreadyOrderText
.setVisibility(TextView.GONE);
}
else{
checkBox.setVisibility(CheckBox.GONE);
}
但有时我会获得一些既没有checkBox又没有TextView的行。
<小时/> 我的自定义BaseAdapter的代码如下所示。
private class MyCustomAdapter extends BaseAdapter {
private static final int TYPE_ITEM = 0;
private static final int TYPE_ITEM_WITH_HEADER = 1;
// private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;
private ArrayList<WatchListAllEntity> mData = new ArrayList();
private LayoutInflater mInflater;
private ArrayList<WatchListAllEntity> items = new ArrayList<WatchListAllEntity>();
public MyCustomAdapter(Context context,
ArrayList<WatchListAllEntity> items) {
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(WatchListAllEntity watchListAllEntity) {
// TODO Auto-generated method stub
items.add(watchListAllEntity);
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final int position1 = position;
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.listitempict, null);
}
watchListAllEntity = new WatchListAllEntity();
watchListAllEntity = items.get(position);
Log.i("position: iteamsLength ", position + ", " + items.size());
if (watchListAllEntity != null) {
ImageView itemImage = (ImageView) v
.findViewById(R.id.imageviewproduct);
if (watchListAllEntity.get_thumbnail_image_url1() != null) {
Drawable image = ImageOperations(watchListAllEntity
.get_thumbnail_image_url1().replace(" ", "%20"),
"image.jpg");
// itemImage.setImageResource(R.drawable.icon);
if (image != null) {
itemImage.setImageDrawable(image);
itemImage.setAdjustViewBounds(true);
} else {
itemImage.setImageResource(R.drawable.iconnamecard);
}
Log.i("status_ja , status",
watchListAllEntity.get_status_ja() + " ,"
+ watchListAllEntity.getStatus());
int NewtheStatus = Integer.parseInt(watchListAllEntity
.getStatus());
CheckBox checkBox = (CheckBox) v
.findViewById(R.id.checkboxproduct);
TextView alreadyOrderText = (TextView) v
.findViewById(R.id.alreadyordertext);
if (NewtheStatus == 1) {
alreadyOrderText
.setVisibility(TextView.GONE);
}
else{
checkBox.setVisibility(CheckBox.GONE);
}
Log.i("Loading ProccardId: ",
watchListAllEntity.get_proc_card_id() + "");
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
WatchListAllEntity watchListAllEntity2 = items
.get(position1);
Log.i("Position: ", position1 + "");
// TODO Auto-generated method stub
if (isChecked) {
Constants.orderList.add(watchListAllEntity2
.get_proc_card_id());
Log.i("Proc Card Id Add: ",
watchListAllEntity2
.get_proc_card_id() + "");
} else {
Constants.orderList.remove(watchListAllEntity2
.get_proc_card_id());
Log.i("Proc Card Id Remove: ",
watchListAllEntity2.get_proc_card_id()
+ "");
}
}
});
}
}
return v;
}
private Drawable ImageOperations(String url, String saveFilename) {
try {
InputStream is = (InputStream) this.fetch(url);
Drawable d = Drawable.createFromStream(is, "src");
return d;
} catch (MalformedURLException e) {
return null;
} catch (IOException e) {
return null;
}
}
public Object fetch(String address) throws MalformedURLException,
IOException {
URL url = new URL(address);
Object content = url.getContent();
return content;
}
public int getCount() {
// TODO Auto-generated method stub
int sizef=items.size();
Log.i("Size", sizef+"");
return items.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return items.get(position);
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
}
答案 0 :(得分:3)
滚动时,ListView
会重复使用行的布局。如果你在某个时候隐藏TextView
或CheckBox
,并且android重新使用该行,那么View
将保持隐藏状态。
您要做的就是在View.VISIBLE
方法中为您要显示的每个getView()
设置View
的可见度。
答案 1 :(得分:0)
我犯了一个错误...... 在我的代码中我做了这样的条件
if (NewtheStatus == 1) {
alreadyOrderText.setVisibility(TextView.GONE);
} else {
checkBox.setVisibility(CheckBox.GONE);
}
正确的代码是:
if (NewtheStatus == 1) {
alreadyOrderText.setVisibility(TextView.INVISIBLE);
checkBox.setVisibility(CheckBox.VISIBLE);
} else {
checkBox.setVisibility(CheckBox.INVISIBLE);
alreadyOrderText.setVisibility(TextView.VISIBLE);
}
在我的XML中,我声明CheckBox和TextView是不可见的。现在代码运行良好。