Android ListView ContextMenu

拥有回忆 提交于 2019-12-08 03:10:11

问题


I'm trying to create a ContextMenu when user tap hold on an item in my ListView. However my code doesn't show anything when I tap hold on my item. Could somebody please check on my code. Thank you.

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"); 
    }

回答1:


Try this:

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;
    }
});

Even you can use closeContextMenu() if you want to close. Hope this helps.




回答2:


If you mean longClick, you're lacking the OnItemLongClickListener().

And, to call the Context menu, check this: how to call context menu




回答3:


You must register the ViewGroup (DLListView) to recognize the component in the menu.

 DLListView = (ListView) getActivity().findViewById(R.id.DLListView);
 registerForContextMenu(DLListView);

With these changes is not necessary to register each element in the ListView component.



来源:https://stackoverflow.com/questions/14035550/android-listview-contextmenu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!