2012-12-26 4 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(), никакого вреда не будет сделано afaik. Но обязательно регистрируйтесь для контекстного меню только в этом состоянии, а не за его пределами. – Kanth

2

Если вы имеете в виду longClick, вы не имея OnItemLongClickListener().

И, чтобы вызвать контекстное меню, проверить это: how to call context menu

Смежные вопросы