我正在使用自定义适配器,它扩展了用于在listview中显示数据的CursorAdapter。为了显示特定的电话号码,我想要一个id,所以我尝试在单击事件中获取它。我在bind方法中设置了单击侦听器,如下所示
right.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
a = v1.getId();
String num=dh.getNumberFromId(a);
}
});我没有从getId()调用中获得正确的视图id,因此无法从db中获得电话号码。
完整的代码在这里:
public class CallSchedulerCustomAdapter2 extends CursorAdapter
{
DbHelper dh;
public Context con;
public LayoutInflater inflater;
int nameindex,phoneindex,emailindex,smsindex,msubindex,mbodyindex, column_id;
TextView text1,text2,text3;
int a; String s1;
@SuppressWarnings("static-access")
public CallSchedulerCustomAdapter2(Context con, Cursor c )
{
super(con, c);
// TODO Auto-generated constructor stub
this.con = con;
nameindex = c.getColumnIndex(dh.contactname);
phoneindex = c.getColumnIndex(dh.contactnumber);
emailindex = c.getColumnIndex(dh.contactmailid);
smsindex=c.getColumnIndex(dh.contactsms);
msubindex=c.getColumnIndex(dh.contactmailsub);
mbodyindex=c.getColumnIndex(dh.contactmailbody);
column_id= c.getColumnIndex("_id");
this.inflater = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public static Cursor c;
@SuppressWarnings("static-access")
@Override
public void bindView( View view, Context context, Cursor cursor)
{
// TODO Auto-generated method stub
v1=view;
c=cursor;
text1= (TextView)view.findViewById(R.id.unschedulecontactnametv);
text2= (TextView)view.findViewById(R.id.unschedulecontactnumbertv);
text3= (TextView)view.findViewById(R.id.unschedulecontactmailidtv);
String s = c.getString(cursor.getColumnIndex(dh.contactname));
text1.setText(s);
text1.setText(cursor.getString(nameindex));
text2.setText(cursor.getString(phoneindex));
text3.setText(cursor.getString(emailindex));
View right = view.findViewById(R.id.callb1);
dh = new DbHelper(context);
right.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
a = v1.getId();
String num=dh.getNumberFromId(a);
}
});
}发布于 2012-06-18 23:43:41
您的v1是在哪里声明的?但是这样想:你在listview中点击你的视图。方法onClick()被调用,但v1有一个上次分配给它的值,而不是为该特定视图执行bindView()时分配给它的值。一种解决方案是将id放在视图的tag属性中。
发布于 2014-05-06 15:42:11
不要使用view.id来存储数据/引用。使用view.tag,你可以存储任何类型的对象。
public void bindView( View view, Context context, Cursor cursor)
{
MyDataHolder data = new MyDataHolder(cursor, "whatever");
view.setTag(data);
....
}
right.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
int viewId = v.getId();
MyDataHolder data = (MyDataHolder)v.getTag()
if (R.id.xxxx == viewId) { // not a good idea
}
if (data.whatever == xxx) { // much better !!
}
}
});https://stackoverflow.com/questions/10275864
复制相似问题