2011-08-03 9 views
0

Androidの場合は、コンテキストメニューを使用して、ボタンのラベルを変更する方法を知りました。Androidでコンテキストビューを使用してテーブルレイアウトでボタンを変更する方法

私は長いクリックでcontextmenuを生成する方法を知っていますが、onContextItemSelected(MenuItemアイテム)メソッドで、クリックされたボタンの表示にアクセスする方法がわかりません。

また、クリックされたボタンはtableLayoutにあるため、ViewにアクセスするためにAdapterContextMenuInfoインスタンス変数を使用できるかどうかはわかりません。

@Override 
public boolean onContextItemSelected(MenuItem item){ 
    switch(item.getItemId()) { 
    case R.id.menu_edit: 
     //change button's text 
     return true; 
    case R.id.menu_delete: 
     return true; 
    case R.id.menu_cancel: 
     return true; 
    } 
    return super.onContextItemSelected(item); 
} 

どのようにこれを行うかについての洞察は非常に高く評価されます。

多くの方に感謝します。

答えて

0

onContextItemSelected(...)が呼び出される前に、アンドロイドはonCreateContextMenu(...)を呼び出します。このメソッドをオーバーライドすると、パラメータとして渡されたView(これはViewがクリックされたものです)を(ローカル変数に)保存できます。次に、onContextItemSelected(...)では、保存されたViewオブジェクトを使用してテキストを変更できます。例えば

View lastClickedView; 

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, 
           ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    lastClickedView = v; 
} 

@Override 
public boolean onContextItemSelected(MenuItem item){ 
    switch(item.getItemId()) { 
     case R.id.menu_edit: 
     lastClickedView.setText("new button text"); 
     return true; 
     case R.id.menu_delete: 
     return true; 
     case R.id.menu_cancel: 
     return true; 
    } 
    return super.onContextItemSelected(item); 
} 
+0

本当に役立つアドバイス。どうもありがとう。 – grebwerd

0

あなたはID与えられたViewオブジェクトを取得するにはfindViewById(id)を使用し、それにsetTextを呼び出すことができます。

switch(item.getItemId()) { 
    case R.id.menu_edit: 
    //change button's text 
    Button myButton = (Button) findViewById(R.id.menu_edit); 
    myButton.setText("new text");  
    return true; 
    case R.id.menu_delete: 
    return true; 
    case R.id.menu_cancel: 
    return true; 
} 
関連する問題