Как получить позицию строки в просмотре списка, когда внутри нее нажата кнопка - PullRequest
0 голосов
/ 29 февраля 2012

Это мой код, где я извлекаю значения из базы данных и отображаю их в соответствующих полях. Я разработал собственный список, в котором у меня есть 5 видов текста и 3 кнопки. Моя проблема в том, как сделать эти кнопки кликабельными, и я хочу получить информацию об этой строке в следующем занятии.

cursor = db.rawQuery("SELECT * FROM JOB_LIST_DISPLAY_TABLE",null);

    adapter = new SimpleCursorAdapter(this,R.layout.customlist,cursor, 
            new String[] {"JOB_TITLE","JOB_START_DATE","JOB_END_DATE","JOB_STATE","JOB_SPECIALITY","JOBPERMANENT",}, 
            new int[] {R.id.Title,R.id.StartDate,R.id.EndDate,R.id.State,R.id.Speciality,R.id.JobType});
            listview.setAdapter(adapter);

Каждая строка в списке состоит из этих элементов. Экран выглядит как ниже TextView1 Textview2 Textview3 Textview4 Textview5 Button1 Button2 button3

Ответы [ 4 ]

1 голос
/ 29 февраля 2012
list.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

        }
    });

где позиция номер строки

0 голосов
/ 01 марта 2012

Для того, чтобы отлавливать события из элементов списка, вам нужно будет создать собственный адаптер.Внутри адаптера вы сами заполняете данные в элементах управления.Вы также можете зарегистрироваться для событий с этими элементами управления.Чтобы определить, из какой строки находится элемент управления, вам нужно установить тег для элементов управления либо с номером строки или значением курсора.Затем вы можете получить это обратно из элемента управления, когда событие инициируется.

Вот пример нестандартного адаптера.Это может указать вам правильное направление:

public class MyAdapter extends ResourceCursorAdapter {

private static final class ViewHolder { 
    public TextView mControl1;
    public TextView mControl2;
} 

private int mData1Col;
private int mData2Col;

public MyAdapter(Context context, Cursor cursor) {
    super(context, R.layout.history_entry, cursor, true);

    // Store cursor column indexes for efficiency. 
    if ( null != cursor ) {
        mData1Col   = cursor.getColumnIndex(DATA1);
        mData2Col   = cursor.getColumnIndex(DATA2);
    }
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

    // This method creates new views as needed.  Most controls only create 
    // views they need to fill the visible display area, then they re-use them.

    // Let the parent create the view we specified at construction.
    View view = super.newView(context, cursor, parent);

    // For efficiency, use a view holder to reference the child views.
    // These find operations can be expensive so do it just once.
    ViewHolder vh = new ViewHolder();
    vh.mTitle   = (TextView) view.findViewById(R.id.control1);
    vh.mAt      = (TextView) view.findViewById(R.id.control2);
    view.setTag(vh);

    return (view);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    // This methods binds the specified cursor data with the provided view.

    // Use the ViewHolder to find the controls we need and populate them.
    ViewHolder vh = (ViewHolder) view.getTag();

            // Populate the controls with the current cursor.
            // Register to receive events from the controls.
            // Set the tag on your controls with the cursor position so you
            // have that info when the item is selected.
}

@Override
public Cursor swapCursor(Cursor newCursor) {

    // Store column indexes for efficiency. 
    if (null != newCursor) {
        mData1Col = newCursor.getColumnIndex(DATA1);
        mData2Col = newCursor.getColumnIndex(DATA2);
    } else {
        mTitleCol    = 0;
        mResolvedAtCol   = 0;
    }

    return (super.swapCursor(newCursor));
}
}
0 голосов
/ 29 февраля 2012
listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

              Log.d("list item position","="+position);

              /* If you want this position in  next activity  then put it in  bundle extra and start the activity,ten fetch it from bundle in the next activity*/


        }

    });
0 голосов
/ 29 февраля 2012

Если я не понял неправильно, вы должны реализовать

onListItemClick с параметром

position Позиция представления в списке

тогда ты сможешь

youradapter.getItem(position)

см. Документ по адресу: GetItem (INT)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...