GridView 항목의 짧은 클릭 및 긴 클릭에 대해 다른 상황에 맞는 메뉴를 표시하고 싶습니다.
먼저 기본 동작은 긴 클릭에 대한 상황에 맞는 메뉴를 자동으로 표시하므로 짧은 클릭에 대한 수신기를 설정해야합니다.
다음으로 OnItemClickListener에서 부울 플래그를 true로 설정하십시오. 긴 클릭에 대한 기본값은 false입니다.
마지막으로 onCreateContextMenu()에서 짧은 클릭인지 확인하고 다른 컨텍스트 메뉴 (표준)를 표시하고 플래그를 false로 설정하십시오. 그렇지 않으면 기본 컨텍스트 메뉴 (옵션)가 표시됩니다.
다음은 아이디어를 보여주는 코드입니다.
public class MainActivity extends Activity {
private static final String[] arr = {"A", "B", "C", "D", "E", "F", "G", "H","I"};
private GridView mTGrid;
private boolean isShort;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTGrid = (GridView) findViewById(R.id.gridView1);
registerForContextMenu(mTGrid);
mTGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
isShort = true;
openContextMenu(view);
}
});
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.cell, arr);
mTGrid.setAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
if(isShort) {
getMenuInflater().inflate(R.menu.context_standard, menu);
menu.setHeaderTitle("Standard Menu for "+arr[info.position]);
isShort = false;
}
else {
getMenuInflater().inflate(R.menu.context_options, menu);
menu.setHeaderTitle("Options Menu for "+arr[info.position]);
}
}
}
또는 u는이 일을 완전히 onItemLongClick 리스너를 제거하고 단지 onContextItemSelected()
답변을 주셔서 감사합니다,하지만 난 생각하지 않는다 선택된 셀을 얻기 위해 다음 코드를 사용 할 수 있습니다 이것은 내 문제에 대한 해결책이다. 컨텍스트 메뉴를 표시하고 싶지 않습니다. – untosabla