1

我正在尝试实现打开一个自定义对话框,其中包含适配器列表中的相关信息。在这里我使用 onclicklistener,它工作正常我得到自定义对话框,我的问题是我没有得到正确的信息。如果我单击对话框中列表中的任何项目,它会显示最后一个项目的详细信息。

在生成列表时,它会显示 logcat 中的位置。但是当我试图点击细节文本视图时,它会占据最后一个项目的位置。

public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View v = convertView;

            if(v == null){
                LayoutInflater vl = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vl.inflate(R.layout.listItem, null);
            }
            Fields o = results.get(position);

            if (o != null) {
                TextView iv = (TextView)v.findViewById(R.id.toptext);
                TextView tv_link = (TextView)v.findViewById(R.id.toptext1);             
                ImageView tv_Image = (ImageView)v.findViewById(R.id.Locimage);

                tv_link.setText("Details >>");
                tv_link.setOnClickListener( new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Dialog dialog = new Dialog(mContext);

                        dialog.setContentView(R.layout.locationdetails);
                        dialog.setTitle("Title");

                        System.out.println("Position   "+pos);

                        TextView LocName = (TextView) dialog.findViewById(R.id.LocDescName);
                        LocName.setText(o.getLocationName());

ImageView LocDescImage = (ImageView) dialog.findViewById(R.id.LocDescImage);
                        Bitmap bitmap;
                        try {
                            bitmap = BitmapFactory.decodeStream((InputStream) new URL(o.getLocationImage()).getContent());
                            LocDescImage .setImageBitmap(bitmap);
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        dialog.show();
                        }
                });

                }
            DbLoc.close();      
            return v;
        }       
    }
4

2 回答 2

1

尝试在 TextView 上使用 setTag(Object o) 和 getTag() 方法,我的意思是它可能会对你有所帮助

tv_link.setTag(o);

在 onClickListener 中,使用 v.getTag() 获取该对象;

Fields o=(Fields)v.getTag();
LocName.setText(o.getLocationName());

它可能会解决您的问题。

于 2011-09-23T06:45:45.753 回答
0

这是因为 tv_link.setOnClickListener 内部的 int:pos 没有被正确管理。为什么你没有在这里添加与之相关的代码。

无论如何,现在如果根据您的要求通过 tv_link.setTag(your_pbject) 传递单个对象就足够了,请通过它,否则创建将实现 View.onClickListener 并在为每个设置此 onclickListenet 时通过构造函数传递相关数据的内部类看法 。

于 2011-09-23T06:56:44.753 回答