Метод onContextItemSelected для строки таблицы - PullRequest
0 голосов
/ 29 августа 2011

Я создаю мероприятие, которое содержит одну таблицу. При выборе строки я хочу обновить или удалить строку с помощью параметров контекстного меню. Таблица находится в представлении TableLayout. Каждая строка добавляется в TableLayout как представление TableRow, а также для каждого TableRow, который я зарегистрировал для контекстного меню с помощью registerForContextMenu (tr);

Параметры контекстного меню отображаются при выборе строки, но проблема в том, что мне нужен номер выбранной строки. Я думал, что это может быть достигнуто с помощью следующего исходного кода в методе onContextItemSelected (элемент MenuItem):?

   AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();  
   int selectedRow = (int) info.id;  

но AdapterContextMenuInfo всегда равно нулю.

Можно ли получить строку таблицы другим методом?

1 Ответ

1 голос
/ 23 августа 2012

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

У меня это работает с onClickListener:

private void AddRow(String rowNo) 
{
final TableLayout table = (TableLayout) findViewById(R.id.my_table);
final TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.table_row_item, null);

 tr.setTag(rowNo);

 TextView tv;
  tv = (TextView) tr.findViewById(R.id.rowNo);
  tv.setText(rowNo);    

  table.addView(tr);
  tr.setOnClickListener(mClickListener);    
}

Затем в OnClickListener:

private OnClickListener mClickListener = new OnClickListener()
    {           
        public void onClick(View v)
        {
        try
            {                           
             String clickedRow = (String) v.getTag();
             Toast toast = Toast.makeText(mContext, clickedRow, Toast.LENGTH_SHORT);
                toast.show();
            }
        catch (Exception ex)
            {                                   
          Toast toast = Toast.makeText(mContext, ex.toString(), Toast.LENGTH_SHORT);
          toast.show();         
            }

        }
    };

Если я не найду другого решения, я буду использовать ту же идею для ContextMenu

- public boolean onContextItemSelected(MenuItem item)

не имеет параметра просмотра, но

- public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 

делает

поэтому я предполагаю, что я буду использовать переменную уровня класса для сохранения текущей строки в событии onCreateContextMenu и извлечения ее в onContextItemSelected

...