Android ListView ContextMenu



我试图创建一个ContextMenu时,用户点击按住我的ListView项目。然而,我的代码没有显示任何东西,当我点击按住我的项目。有人能检查一下我的代码吗?谢谢你。

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

试试这个:

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()。希望这对你有所帮助。

如果您指的是longClick,那么您缺少OnItemLongClickListener()

并且,要调用上下文菜单,检查这个:如何调用上下文菜单

必须注册ViewGroup (DLListView)才能识别菜单中的组件。

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

有了这些更改,就没有必要在ListView组件中注册每个元素了。

相关内容

  • 没有找到相关文章

最新更新