2

CursorAdapterでデータを表示するために拡張するカスタム アダプターを使用していlistviewます。特定の電話番号を表示するには、ID が必要なので、クリック イベントで取得しようとします。次のようにバインドメソッドでクリックリスナーを設定しました

right.setOnClickListener(new View.OnClickListener() 
   {
        @Override
        public void onClick(View v) 
        {
            a = v1.getId();
            String num=dh.getNumberFromId(a);
        }
   });

呼び出しからビューの正しい ID を取得していないgetId()ため、データベースから電話番号を取得できません。

完全なコードは次のとおりです。

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);

        }
       });
  }
4

2 に答える 2

0

あなたの v1 はどこで宣言されていますか? しかし、次のように考えてみてください。リストビューで yout ビューをクリックします。メソッド onClick() が呼び出されますが、v1 には、その特定のビューに対して bindView() が実行された時点で割り当てられた値ではなく、最後に割り当てられた値があります。1 つの解決策は、id をビューのタグ プロパティに入れることです。

于 2012-06-18T15:43:41.130 に答える