我正在尝试实现打开一个自定义对话框,其中包含来自适配器列表的相关信息。在这里,我正在使用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;
}
}
答案 0 :(得分:1)
尝试在TextView上使用setTag(Object o)和getTag()方法,它可能对您有所帮助 我的意思是
tv_link.setTag(o);
在onClickListener中,使用v.getTag();
获取该对象Fields o=(Fields)v.getTag();
LocName.setText(o.getLocationName());
它可以解决您的问题。
答案 1 :(得分:0)
这是因为无法正确管理tv:link.setOnClickListener中的int:pos。 为什么你没有在这里添加与它相关的代码。
无论如何现在如果通过tv_link.setTag(your_pbject)传递单个对象就足够了,根据你的要求,通过它,否则创建内部类,它将实现View.onClickListener并在设置时通过构造函数传递相关数据每个视图的onclickListenet。