以下是我的适配器中的getView函数:
public View getView(int position, View convertView, ViewGroup parent) {
final ResultItem item;
final TextView fn;
final View rd;
item = list.get(position);
convertView = new RelativeLayout(mContext);
if (position % 2 == 0) {
convertView.setBackgroundColor(COLOR_RESULT_ENTRY1);
} else {
convertView.setBackgroundColor(COLOR_RESULT_ENTRY2);
}
convertView.setMinimumHeight(ENTRY_MINIMUM_HEIGHT);
layoutEntry(convertView, parent, RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
fn = new TextView(mContext);
fn.setTextSize(GENERIC_TEXT_SIZE);
fn.setText(item.fieldName);
layoutItem(fn, (int) (parent.getWidth() * FIELD_NAME_WIDTH), RelativeLayout.LayoutParams.WRAP_CONTENT, 0, 0);
if (item.type == TYPE1) {
rd = new EditText(mContext);
((EditText) rd).setTextSize(GENERIC_TEXT_SIZE);
((EditText) rd).setText((String) item.retrievedData);
((EditText) rd).setBackgroundDrawable(null);
rd.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
item.retrievedData = ((EditText) rd).getText().toString();
}
return false;
}
});
} else if (item.type == TYPE2) {
rd = new TextView(mContext);
((TextView) rd).setTextSize(GENERIC_TEXT_SIZE);
((TextView) rd).setText((String) item.retrievedData);
rd.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (((TextView) rd).getText().toString().equals(ResultItem.checked)) {
((TextView) rd).setText(ResultItem.unchecked);
item.retrievedData = ResultItem.unchecked;
} else {
((TextView) rd).setText(ResultItem.checked);
item.retrievedData = ResultItem.checked;
}
return true;
}
});
} else if (item.type == TYPE3) {
rd = new TextView(mContext);
((TextView) rd).setTextSize(GENERIC_TEXT_SIZE);
((TextView) rd).setText((String) item.retrievedData);
} else if (item.type == TYPE4) {
rd = new ImageView(mContext);
((ImageView) rd).setImageBitmap((Bitmap) item.retrievedData);
} else {
rd = new TextView(mContext);
((TextView) rd).setText((String) item.retrievedData);
}
layoutItem(rd, (int) (parent.getWidth() * (1.0f - FIELD_NAME_WIDTH)),
RelativeLayout.LayoutParams.WRAP_CONTENT, (int) (parent.getWidth() * FIELD_NAME_WIDTH), 0);
((RelativeLayout) convertView).addView(fn);
((RelativeLayout) convertView).addView(rd);
return convertView;
}
list是一个ArrayList,它包含我想要放在ListView上的数据。 LayoutEntry和LayoutItem只是设置视图宽度,高度和位置的两个函数。基本上,我想根据项目的类型字段返回四种类型的条目。
奇怪的是,当我点击对应于TYPE2和TYPE4的列表条目时,条目的背景颜色变为。实际上它正在点击效果。但是,对于TYPE4,我没有实现任何clicklistener,对于TYPE2,侦听器用于rd,而不是用于convertView。如果我点击TYPE1和TYPE3返回的条目,没有任何反应,这是我的预期。为什么在TYPE2和TYPE4上发生了奇怪的事情?
答案 0 :(得分:0)
据我所知,你有自定义ListView所以你应该有自定义XML来描述列表项。我认为你需要仔细看看你的xml。