2012-12-26 40 views
1

我正在嘗試創建一個ContextMenu,當用戶點按住我的ListView中的某個項目時。但是,當我點擊持有我的物品時,我的代碼不會顯示任何內容。有人可以檢查我的代碼。謝謝。Android ListView ContextMenu

public class MyD extends SherlockListFragment implements 
     ActionBar.TabListener { 

    private File file; 
    private List<String> myList; 

    private Fragment mFragment; 

    private ListView DLListView; 
    private ArrayAdapter<String> listAdapter; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     getActivity().setContentView(R.layout.dl_listview); 

     View empty = getActivity().findViewById(R.id.empty); 
     DLListView = (ListView) getActivity().findViewById(R.id.DLListView); 
     DLListView.setEmptyView(empty); 

     if (!Environment.getExternalStorageState().equals(
       Environment.MEDIA_MOUNTED)) { 
      Toast.makeText(getActivity(), 
        "Error! No SDCARD Found!", 
        Toast.LENGTH_LONG).show(); 
     } else { 
      File directory = new File(Environment.getExternalStorageDirectory() 
        + File.separator + "St"); 
      directory.mkdirs(); 
     } 
     DLListView = (ListView) getActivity().findViewById(R.id.DLListView); 

     myList = new ArrayList<String>(); 

     File sdCard = Environment.getExternalStorageDirectory(); 
     file = new File(sdCard.getAbsolutePath() + "/St/"); 

     File list[] = file.listFiles(); 

     for (int i = 0; i < list.length; i++) { 
      String fileName = list[i].getName(); 
      fileName = fileName.replace(".txt", ""); 
      myList.add(fileName); 

     } 

     listAdapter = new ArrayAdapter<String>(getActivity(), 
       R.layout.simplerow, myList); 

     DLListView.setAdapter(listAdapter); 

     DLListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       // TODO Auto-generated method stub 
       String textToPass = myList.get(position); 
       Intent i = new Intent(getActivity(), ViewActivity.class); 
       textToPass = textToPass.replace(textToPass + "", textToPass 
         + ".txt"); 
       i.putExtra("textToPass", textToPass); 
       startActivity(i); 
      } 
     }); 

    DLListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
}); 

} 

    public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) 
    { 
     super.onCreateContextMenu(menu, v, menuInfo); 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; 
     String name = ((TextView) info.targetView).getText().toString(); 
     menu.setHeaderTitle(name);  
     menu.add(0,v.getId(), 0, "Play");  
     menu.add(0,v.getId(),1,"Delete"); 
    } 
+0

你的意思是長按? – Kanth

+0

是的Appu。你能幫忙嗎? –

+1

您可以使用ListView.setOnItemLongClickListener()。你是否? – Kanth

回答

2

試試這個:

DLListView.setOnItemLongClickListener(new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, 
      int position, long id) { 
     // TODO Auto-generated method stub 

      registerForContextMenu(view); 
      openContextMenu(view);   

     return false; 
    } 
}); 

即使你可以使用closeContextMenu(),如果你想關閉。希望這可以幫助。

+0

我可以同時使用OnItemLongClickListener()和ContextMenu嗎?即項目長按並且上下文菜單出現在不同的條件? – twlkyao

+0

當然,只要你提到onItemLongClick()中的條件,就不會造成傷害。但請確保僅在該情況下注冊contextmenu,而不是在其外部註冊。 – Kanth

2

如果你的意思是longClick,你缺少OnItemLongClickListener()

而且,調用右鍵菜單,檢查:how to call context menu

相關問題