1

这是我的适配器中的 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 只是设置视图宽度、高度和位置的两个函数。基本上,我想根据 item 的 type 字段返回四种类型的条目。

奇怪的是当我点击TYPE2和TYPE4对应的列表条目时,条目的背景颜色变了。实际上它正在采取点击效果。但是,对于 TYPE4,我没有实现任何 clicklistener,对于 TYPE2,侦听器是用于 rd,而不是用于 convertView。如果我点击 TYPE1 和 TYPE3 返回的条目,什么也没有发生,这正是我所期望的。为什么 TYPE2 和 TYPE4 会发生奇怪的事情?

4

1 回答 1

0

据我所知,您拥有自定义 ListView,因此您应该拥有描述列表项的自定义 XML。我认为你需要更接近你的xml。

于 2013-07-19T13:46:19.457 回答