0

1 つのテーブルを含むアクティビティを作成しています。行を選択するときに、コンテキスト メニュー オプションを使用して行を更新または削除したいと考えています。テーブルは TableLayout ビュー内にあります。各行は TableRow ビューとして TableLayout に追加されます。また、各 TableRow についても、registerForContextMenu(tr); を使用してコンテキスト メニューに登録しました。

行を選択するとコンテキストメニューオプションが表示されますが、問題は選択した行の番号が必要なことです。これは onContextItemSelected( MenuItem item ) メソッドの次のソース コードで実現できると考えました。

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

ただし、AdapterContextMenuInfo は常に null です。

他の方法でテーブル行を達成できますか?

4

1 に答える 1

1

まだこれに対する答えを探して、より良い方法があるかどうかを確認しますが、テーブル行を作成するときに、タグを設定して取得することができます

私はこれを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にも同じアイデアを使用します

The

- public boolean onContextItemSelected(MenuItem item)

ビューパラメータはありませんが、

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

します、

したがって、クラスレベルの変数を使用して、現在の行をonCreateContextMenuイベントに格納し、onContextItemSelectedで取得すると思います。

于 2012-08-23T09:00:11.173 に答える