ListView onItemSelected 监听器

ListView onItemSelected Listener

我只想在列表视图的选定行中显示图像。这是代码:

private class ListAdapter extends BaseAdapter {
    LayoutInflater inflater;
    ViewHolder viewHolder;

    public ListAdapter(Context context) {
        inflater = LayoutInflater.from(context);
    }

    public int getCount() {
        return attendeeList.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {

            convertView = inflater.inflate(R.layout.attendee_listview_row,
                    null);
            viewHolder = new ViewHolder();

            viewHolder.txt_dName = (TextView) convertView
                    .findViewById(R.id.txtDisplayName);

            viewHolder.txt_dAddr = (TextView) convertView
                    .findViewById(R.id.txtDisplayAddr);

            viewHolder.txt_dtelNo = (TextView) convertView
                    .findViewById(R.id.txtDisplayTelNo);

            viewHolder.btn_scan = (ImageView) convertView.findViewById(R.id.btnScan);
            viewHolder.registered_tag = (ImageView) convertView.findViewById(R.id.ivRegisteredTag);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.txt_dName.setText(attendeeList.get(position)
                .getAccountName().trim());

        viewHolder.txt_dAddr.setText(attendeeList.get(position)
                .getAttendeeAddr().trim());

        viewHolder.txt_dtelNo.setText("Tel no: "
                + attendeeList.get(position).getTelNo().trim());        

        viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                viewHolder.registered_tag.setVisibility(View.VISIBLE);
                Intent intent = new Intent(
                        "com.google.zxing.client.android.SCAN");
                intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
                startActivityForResult(intent, 0);

            }
        });

        return convertView;
    }
}

使用这些代码,我试图在 btn_scan onClick 时显示 registered_tag。但是,图像并没有真正显示在所选行中。它显示在另一行。

有什么想法吗?提前致谢。

您可能在单击任何行时看到最后一行图像发生变化,因为 viewHolder 将在调用 getView 时包含最后一行视图。使用 viewHolder.btn_scan 视图的 setTaggetTag 方法在 onClick 方法中保存和获取选定的行视图:

viewHolder.btn_scan.setTag(viewHolder);
viewHolder.btn_scan.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
               ViewHolder selectedViewHolder=(ViewHolder)v.getTag();
               selectedViewHolder.registered_tag.setVisibility(View.VISIBLE);
               ...
            }
        });