2014-01-13 5 views
0

데이터베이스에서 정보를 얻고이 정보를 표시하기 위해 ArrayAdapter를 만들었습니다. 항목을 클릭하면 가능한 네 가지 동작으로 메뉴가 나타납니다. 하지만이 메뉴 항목에 대한 동작 수신기를 추가 할 수있는 방법을 모르겠습니다.이 ContextMenu Items를 클릭 가능하게 만들고 항목에 작업을 추가하려면 어떻게해야합니까?

 MySQLiteHelper db = new MySQLiteHelper(this); 

    List<Client> list = db.getAllClients(); 
    final ListView listview = (ListView) findViewById(R.id.listView_ID); 

    final ArrayAdapter adapter = new ArrayAdapter(this, 
    android.R.layout.simple_list_item_1, list); 
    listview.setAdapter(adapter); 

    registerForContextMenu(listview); 
} 


@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
if (v.getId() == R.id.listView_ID) { 
    ListView lv = (ListView) v; 
    AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo; 
    Object obj = (Object) lv.getItemAtPosition(acmi.position); 

    menu.add("Call"); 
    menu.add("Email"); 
    menu.add("Edit"); 
    menu.add("Delete"); 

} 
} 

답변

1

당신은 당신의 onCreateContextMenu와 같은 클래스에서 onContextItemSelected을 구현할 수 있지만, 당신이 당신의 메뉴 항목에게 ID를 부여해야합니다, 그래서

menu.add(MenuItem.NONE, CALL_ITEM_ID, MenuItem.NONE, "Call"); 

(두 NONE처럼 뭔가

menu.add("Call") 

교체 항목 그룹화 및 순서 지정 - http://developer.android.com/reference/android/view/Menu.html#add(int, int, int, java.lang.CharSequence 참조)

다음 c "이메일"나는 메뉴 항목을 정의 할 수있는 방법

MenuItem callItem = menu.add("Call"); 
callItem.setOnMenuItemClickListener(new MenuItemOnClickListener() { 
    public boolean onMenuItemClick(MenuItem item) { 
     // do whatever you want to do... 
     doCallStuff(); 
     // then return true to say you've handled this 
     return true; 
    } 
}); 
+0

잘 작동합니다! 고마워요! 좋은 하루 되세요! – user3190360

0

U 위에서 getActivity()를 제거 프래그먼트를 사용하지 않는 경우이 가 메뉴 XML을

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/pick_gallery" 
     android:title="Choose from Gallery"> 
    </item> 
    <item 
     android:id="@+id/pick_camera" 
     android:title="Use Camera"> 
    </item> 

</menu> 

하고

@Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) 
    { 

     getActivity().getMenuInflater().inflate(R.menu.image_options, menu); 
     super.onCreateContextMenu(menu, v, menuInfo); 
} 

@Override 
    public boolean onContextItemSelected(android.view.MenuItem item) 
    { 

     switch (item.getItemId()) 
     { 
     case R.id.pick_camera: 
      Log.i("MainActivity", "CAM Activity launching"); 

      break; 
     case R.id.pick_gallery: 
     { 

     } 
      break; 
     } 

     return super.onContextItemSelected(item); 
    } 

만들기 시도 .

+0

를 "전화":는이 같은 OnMenuItemClickListener을 추가 할 수있는,

public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case CALL_ITEM_ID: doCallStuff(); ... 

다른 방법으로는, menu.add()MenuItem 반환해야 등등이 방법으로 작동하려면? – user3190360

+0

메뉴 xml에 임의의 수의 항목을 추가 할 수 있습니다. – keshav

+0

registerForContextMenu (listview); 있어야합니다. – keshav

0

이것이 우리가 수행 한 방법입니다. 이 메서드를 호출해야합니다.

public void onButtonClickEvent(View caller) 
{ 
registerForContextMenu(caller); 
openContextMenu(caller); 
unregisterForContextMenu(caller); 

} 

버튼의 onClick 속성을 onButtonClickEvent로 설정해야합니다. 긴 클릭은 컨텍스트 메뉴를 트리거하지 않습니다. 컨텍스트 메뉴가 표시되면 바로 등록 해제되기 때문입니다.

관련 문제