2012-04-11 55 views
0

我已經創建了此代碼來列出SD卡下特定文件夾(稱爲「pass」)下的pdf文件,而我正在努力的是顯示從上下文中的刪除功能menu.I繼續點擊任何文件,但它不顯示任何菜單cotext對話框以刪除SD卡中的文件

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> 

回答

0

我想你錯過了這個功能...

ListView lv=getListView(); 
registerForContextMenu(lv);<-- did you register your listview for context menu? 
+0

我應該粘貼在公共無效onCreateContextMenu類? – AliDeV 2012-04-11 18:12:21

+0

不..它應該在onCreate部分..你是擴展listactivity權利? – 5hssba 2012-04-11 18:13:17

+0

是否正常工作?... – 5hssba 2012-04-11 18:22:58

0

按照我的想法,

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

     File myFile = new File(fileName); 

1)你插入「Environment.getExternalStorageDirectory();」到文件file 然後轉換爲字符串,然後再...... 您可以直接插入到字符串,然後傳遞給文件作爲這樣

String root = Environment.getExternalStorageDirectory().getPath(); 
String deletefile= root + "/pass/myfile.pdf"; 
File file = new File(deletefile); 
file.delete();