2012-02-25 11 views
5

選択したListviewアイテムからコンテキストメニューのタイトルを設定するにはどうすればよいですか?これは私のメインアクティビティです。選択したリストビューアイテムからコンテキストメニューのタイトルを設定します

public class OListActivity extends ListActivity { 
...... 
...... 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     registerForContextMenu(getListView()); 
     ...... 
...... 
     MatrixCursor cursor; 
     cursor = NameManager.getnameList(); 
     startManagingCursor(cursor); 
     String[] from = { "name", "info", "status", BaseColumns._ID }; 
     int[] to = { R.id.name, R.id.info, R.id.status }; 
     SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       R.layout.row, cursor, from, to); 
     setListAdapter(adapter); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Menu");// TODO Change to name of selected listview item. 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    } 
..... 
..... 

menu.setHeaderTitleからR.id.nameに設定する必要があります。私は別のシミュレータquestionを認識していますが、複雑なListViewを複数のtextviewsと扱うことは言及していません。

答えて

13

onCreateContextMenu()方法からContextMenuInfoパラメータを使用します。

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     AdapterView.AdapterContextMenuInfo info; 
     try { 
      // Casts the incoming data object into the type for AdapterView objects. 
      info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
     } catch (ClassCastException e) { 
      // If the menu object can't be cast, logs an error. 
      Log.e(TAG, "bad menuInfo", e); 
      return; 
     } 
     Cursor cursor = (Cursor) getListAdapter().getItem(info.position); 
     if (cursor == null) { 
      // For some reason the requested item isn't available, do nothing 
      return; 
     } 

     // if your column name is "name" 
     menu.setHeaderTitle(cursor.getString(cursor.getColumnIndex("name"))); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.context_menu, menu); 
    } 
+0

これはうまくいきました、ありがとうございました。ところで、私は 'menu.setHeaderTitle(cursor.getString(1))'に変更しなければなりませんでした。 –

+0

@BinoyBabuあなたは正しい方法です。 'getString()'は 'int'を必要とし、' String'は必要としません。私は疲れていて、私は 'cursor.getString(cursor.getColumnIndex(" name "));'メソッドを考えていました。 – Luksprog

+0

それを心配しないでください。あなたはとにかく私の英雄です。寝るのは大丈夫ですか? –

0

私はこれはかなり古いポストであると同様に正しい答えを知っています。しかし、今日これを使っている間に、私は何か追加したいと思っています。

ContextMenuInfoパラメータは、ContextMenuを開始したアイテムの正確な位置、つまりアドパター項目を見つけるために使用されます。したがって

のgetItem()メソッド上記にカーソルオブジェクトを返すように、それは、その位置info.positionを使用してアダプターのgetItem()方法で定義されたタイプのアイテムを返すことができます。

は(私のケースでは、Modelクラスを返され、その後、私は私のモデルは model.getItamName()ようにサポートしている私の方法を渡すことができ menu.setHeaderTitle()を経由してタイトルを設定することに気づい)

あなたAdapterViewがどのヘッダあなたが含まれている場合も、覚えておいてくださいmenuInfoを使用して位置を取得している間にそれらを除外する必要があります。同様に、

Cursor cursor = (Cursor) getListAdapter().getItem(info.position - yourList.getHeaderViewsCount()); 

:)

関連する問題