0

我已经创建了这段代码来列出 sd 卡上特定文件夹(称为“pass”)下的 pdf 文件,而我正在努力从上下文菜单中显示删除功能。我一直点击任何文件,但它不显示任何菜单

The list code and the context menu 


   public class PDFListActivity extends ListActivity {
ArrayAdapter<String> adapter;
int clickCounter=0;
ArrayList<String> listItems=new ArrayList<String>();
private File[] imagelist;
String[] pdflist;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ListView lv=getListView(); 
        registerForContextMenu(lv);
        setContentView(R.layout.mainlistpdf);
      File images=new File(Environment.getExternalStorageDirectory(), "pass");
        imagelist = images.listFiles(new FilenameFilter(){  
                public boolean accept(File dir, String name)  
                {    

                        return ((name.endsWith(".pdf")));  
                }  
        });

        pdflist = new String[imagelist.length];
        for(int i = 0;i<imagelist.length;i++)
        {
                pdflist[i] = imagelist[i].getName();
        }
        this.setListAdapter(new ArrayAdapter<String>(this,
                        android.R.layout.simple_list_item_1, pdflist));
}
@Override  
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
    super.onCreateContextMenu(menu, v, menuInfo); 
    ListView list=getListView(); 
    registerForContextMenu(list); 
        menu.setHeaderTitle("Context Menu");  
        menu.add(0, v.getId(), 0, "delete");  
        menu.add(0, v.getId(), 0, "wtever");  
    }  

    @Override  
    public boolean onContextItemSelected(MenuItem item) {  
        if(item.getTitle()=="delete"){function1(item.getItemId());}  
        else if(item.getTitle()=="wtever"){function2(item.getItemId());}  
        else {return false;}  
    return true;  
    }  

    public void function1(int id){  
        Toast.makeText(this, "function 1 called", Toast.LENGTH_SHORT).show();  
        File folder = Environment.getExternalStorageDirectory();
        String fileName = folder.getPath() + "/pass/hello.pdf";

        File myFile = new File(fileName);
        if(myFile.exists())
            myFile.delete();

    }  
    public void function2(int id){  
        Toast.makeText(this, "function 2 called", Toast.LENGTH_SHORT).show();  
    }

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        PackageManager packageManager = getPackageManager();
         Intent testIntent = new Intent(Intent.ACTION_VIEW);
         testIntent.setType("application/pdf");
         List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
         if (list.size() > 0 && imagelist[(int) id].isFile()) {
             Intent intent = new Intent();
             intent.setAction(Intent.ACTION_VIEW);
             Uri uri = Uri.fromFile(imagelist[(int) id].getAbsoluteFile());
             intent.setDataAndType(uri, "application/pdf");
             startActivity(intent);
         }

}

    }  
        My xml file      
    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:drawSelectorOnTop="false" />

</LinearLayout>
4

2 回答 2

0

我想你错过了这个功能......

  ListView lv=getListView();
 registerForContextMenu(lv);<-- did you register your listview for context menu?
于 2012-04-11T18:04:01.673 回答
0

按照我的想法,

File folder = Environment.getExternalStorageDirectory();
        String fileName = folder.getPath() + "/pass/hello.pdf";

        File myFile = new File(fileName);

1) 你插入“Environment.getExternalStorageDirectory();” 进入文件然后进入字符串然后再次进入文件......你直接插入字符串然后像这样传递给文件

String root = Environment.getExternalStorageDirectory().getPath();
String deletefile= root + "/pass/myfile.pdf";
File file = new File(deletefile);
file.delete();
于 2013-01-01T12:19:42.767 回答