여기 내 어댑터에서의 getView 함수이다 :왜 내 ListView 항목을 클릭 할 수 있습니까?
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;
}
목록 내가 ListView를 입고 할 데이터를 보유하고 ArrayList에 있습니다. LayoutEntry 및 LayoutItem은 뷰 너비, 높이 및 위치를 설정하는 두 가지 기능입니다. 기본적으로 항목의 유형 필드를 기반으로 반환 할 항목의 네 가지 유형이 있습니다.
TYPE2 및 TYPE4에 해당하는 목록 항목을 클릭하면 항목의 배경색이 바뀐 것입니다. 사실 그것은 클릭 효과를 얻고 있습니다. 그러나 TYPE4의 경우 clicklistener를 구현하지 않았으며 TYPE2의 경우 리스너는 convertView가 아닌 rd에 대한 것입니다. TYPE1 및 TYPE3에 의해 반환 된 항목을 클릭하면 아무 일도 일어나지 않습니다. 이는 내가 예상 한 것입니다. 왜 이상한 일이 TYPE2 및 TYPE4에서 발생합니까?