为什么我的ListView条目是可点击的?

时间:2013-07-19 13:30:11

标签: android android-listview

以下是我的适配器中的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上发生了奇怪的事情?

1 个答案:

答案 0 :(得分:0)

据我所知,你有自定义ListView所以你应该有自定义XML来描述列表项。我认为你需要仔细看看你的xml。