2011-08-03 6 views
0

나는 안드로이드에서 contextmenu를 사용하여 버튼을 길게 클릭하면 어떻게 바뀌는 지 궁금합니다.안드로이드에서 contextview를 사용하여 tablelayout에서 버튼을 수정하는 방법

나는 긴 클릭으로 contextmenu를 생성하는 방법을 알고 있지만, onContextItemSelected (MenuItem item) 메소드에서 클릭 한 버튼을보기에 액세스하는 방법을 모르겠습니다.

또한 클릭 한 단추는 tableLayout에 있으므로보기에 액세스하기 위해 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(...)이 호출되기 전에, android는 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 주어진보기 개체를 가져 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; 
} 
관련 문제