Listview с TextView и Button. RowId нажатой кнопки

У меня есть список, как показано ниже. Текст в TextView поступает из базы данных.

------------------------- TextView Button ------------------------- 

Когда я нажимаю на кнопку, я хочу показать текст в TextView этой строки в Toast.

Мой вопрос следующий: Когда я нажимаю на кнопку, я показываю текст строки, которая выбирается курсором. Я не показываю текст строки, где находится кнопка. Я знаю, что проблема – это переменная mCursor.

Я не знаю, как это исправить. У кого-нибудь есть идея?

Вот мой ModulCursorAdapter:

 public class ModuleCursorAdapter extends ResourceCursorAdapter implements OnClickListener { private Context mContext; private Cursor mCursor; public ModuleCursorAdapter(Context context, Cursor cur) { super(context, R.layout.notes_row, cur); this.mContext = context; } @Override public View newView(Context context, Cursor cur, ViewGroup parent) { LayoutInflater li = LayoutInflater.from(context); return li.inflate(R.layout.notes_row, parent, false); } @Override public void bindView(View view, Context context, Cursor cur) { this.mCursor = cur; TextView tvText1 = (TextView)view.findViewById(R.id.text1); Button btnButtonOFF = (Button)view.findViewById(R.id.buttonOFF); tvText1.setText(cur.getString(cur.getColumnIndex(NotesDbAdapter.KEY_TITLE))); int idRow = cur.getColumnIndex(NotesDbAdapter.KEY_ROWID); btnButtonOFF.setTag(cur.getInt(idRow)); btnButtonOFF.setOnClickListener(btnButtonOFFclicked); } @Override public void onClick(View view) { } private OnClickListener btnButtonOFFclicked = new OnClickListener() { @Override public void onClick(View view) { Toast.makeText(mContext,mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.KEY_TITLE)), Toast.LENGTH_LONG).show(); } }; } 

Комментарий

Кнопка в файле xml:

 <Button android:id="@+id/buttonOFF" android:gravity="center" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:focusable="false" android:text="OFF" /> <Button android:id="@+id/buttonOFF2" android:gravity="center" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:focusable="false" android:onClick="btnButtonOFFclicked" android:text="ON" /> 

OnClickMethod в MainActivity

  public class MainActivity extends ListActivity { ..... public void btnButtonOFFclicked(View view) { Toast.makeText(MainActivity.this,"Test", Toast.LENGTH_LONG).show(); //Toast.makeText(mContext,mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.KEY_TITLE)), Toast.LENGTH_LONG).show(); } } 

Основная деятельность

 public class MainActivity extends ListActivity { ... private void fillData() { Cursor notesCursor = mDbHelper.fetchAllNotes(); startManagingCursor(notesCursor); adapter = new ModuleCursorAdapter(this, notesCursor); setListAdapter(adapter); } ... } 

Метод Notes.DbAdapter.fetchAllNotes ()

 public Cursor fetchAllNotes() { return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_DEVICETYPE, KEY_HOMECODE, KEY_DEVICECODE}, null, null, null, null, null); } 

Благодарю.

Феликс

Просто создайте частный класс внутри адаптера, как это, и установите слушателя на кнопке в методе bindView, это будет похоже на

 public void bindView(View view, Context context, Cursor cur) { this.mCursor = cur; TextView tvText1 = (TextView)view.findViewById(R.id.text1); Button btnButtonOFF = (Button)view.findViewById(R.id.buttonOFF); tvText1.setText(cur.getString(cur.getColumnIndex(NotesDbAdapter.KEY_TITLE))); int idRow = cur.getColumnIndex(NotesDbAdapter.KEY_ROWID); btnButtonOFF.setOnClickListener(new OnItemClickListener(cur.getInt(idRow))); } private class OnItemClickListener implements OnClickListener { private int position; public OnItemClickListener(int position) { super(); this.position = position; } @Override public void onClick(View v) { // position is an id. } } 

Вот код, по которому вы можете узнать положение строки в строке

Переопределить метод в ModuleCursorAdapter

  @Override public View getView(int position, View convertView, ViewGroup parent) { convertView= super.getView(position,convertView,parent ); Button btnButtonOFF = (Button)convertView.findViewById(R.id.buttonOFF); String tag = btnButtonOFF.getTag().toString()+","+position; btnButtonOFF.setTag(tag); } 

Теперь в onclick метод btnButtonOFFclicked listener get tag View и извлекает позицию, прикрепленную с помощью тега, если полезно, тогда проголосуйте