2011-05-05 4 views
7

어리석은 질문은 죄송합니다.하지만 목록보기에서 항목을 짧게 클릭하여 상황에 맞는 메뉴를 표시하려면 해당 코드를 변경/추가해야합니까?짧은 클릭으로 상황에 맞는 메뉴

public class MyActivity extends ListActivity implements AdapterView.OnItemClickListener { 
    static final String[] COUNTRIES = new String[]{ 
      "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
      "Angola", "Anguilla", "Antarctica" 
    }; 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES)); 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(this); 
    } 


    public void onCreateContextMenu(ContextMenu menu, View v, 
            ContextMenu.ContextMenuInfo menuInfo) { 
     Log.e("sdklfjsdkljfl", " <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< "); 
     menu.setHeaderTitle("HELLO"); 

    } 

    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
     Log.e("kjhasjkdhkas", "sdkhjkhskaf"); 
     this.openContextMenu(view); 
    } 
} 

답변

5

보기에서 registerForContextMenu를 호출해야합니다.

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
    registerForContextMenu(view); 
    view.setLongClickable(false); // undo setting of this flag in registerForContextMenu 
    this.openContextMenu(view); 
} 

또한 실제로 메뉴 항목을 추가해야하거나 메뉴 중 하나를 표시하지 않습니다 것 (false)를 setLongClickable에 호출을 추가 수정 됨. 헤더 만 설정하는 것만으로는 충분하지 않습니다.

참고 : 아직 완전히 추적하지는 못했지만 registerForContextMenu (view)를 호출하면 긴 누를 때 컨텍스트 메뉴를 사용한다고 가정하고 플래그를 설정합니다. 이 플래그가 설정되면 AbsListView의 onTouch 논리가 더 이상 onClick을 발생시키지 않습니다. 나는 이것을 완전히 파헤 칠 시간이 없다. ArrayAdapter와 같은 간단한 어댑터를 사용하고 기본 ListView와 함께 ListActivity를 사용할 때 짧은 클릭으로 상황에 맞는 메뉴가 나타나는지 또는 longclick을 사용할 수 있는지를 결정해야합니다.

길게 누르는 것에 관심이 없다면 registerForContextMenu (view)에 설정된 플래그를 취소하여 짧게 누르면 컨텍스트 메뉴가 작동합니다.

누군가 다른 사람이 코드를 파헤칠 때 더 많은 정보 또는 시간을 갖고있을 것입니다.

+0

내가이, 감사를 만들었지 만 드리려고 후 난 단지 왜 once- 1 개 목록의 항목에 대한 컨텍스트 메뉴를 호출 할 수 있습니다? – eve

+0

답변을 더 많은 정보로 업데이트했습니다. 그러나 나는 무슨 일이 일어나고 있는지 완전히 확신 할 수 없으며, 오늘 그것을 파헤 칠 시간이 없습니다. 나는 당신을 위해 일할 수있는 해결 방법을 게시했습니다. – slund

7

ListFragment를 사용했기 때문에 여기에 게시 된 다른 솔루션이 작동하지 않았습니다. 그러나 다음과 같은 솔루션은 ListFragment와 (일반적으로하거나 오래된 목록보기)를 ListActivity 모두 아주 잘 작동하는 것 같다 :

public void onListItemClick(ListView l, View v, int position, long id){ 
    l.showContextMenuForChild(v); 
} 

그것은 훨씬 더 간단하고 우아한입니다. 실제로 이것은 실제로 ListView 클래스 자체가 긴 클릭으로 컨텍스트 메뉴를 시작하는 방법입니다.

0

긴 클릭을 해제 registerForContextMenu() 후이를 추가하는 것을 잊지 마십시오 :

listview.setLongClickable(isRestricted());