2014-10-17 106 views
0

我的代碼有一些麻煩。 在listView中,當我長按一個ContextMenu時顯示。顯示刪除文件的選項。 但是,當我在ContextMenu中按下刪除應用程序強制關閉。Android Listview時長按一個ContextMenu顯示刪除文件選項

任何想法? 由於事先

這是我的代碼

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
       int index, long arg3) { 

      registerForContextMenu(listView); 
      return false; 
     } 
});   

} 

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
     menu.setHeaderTitle("Options"); 
     menu.add(0, v.getId(), 0, "Change Name"); 
     menu.add(0, v.getId(), 0, "Delete"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     if(item.getTitle()=="Change Name"){function1(item.getActionView(), item.getItemId());} 
     else if(item.getTitle()=="Delete"){function2(item.getActionView(), item.getItemId());} 
     else {return false;} 
    return true; 
    } 

    public void function1(View view, int id){ 
     //Change Name Code 
    } 
    public void function2(View view, int id){ 
     String product = ((TextView)view).getText().toString(); 
     File dir = getFilesDir(); 
     File file = new File(dir, (product)); 
     boolean deleted = file.delete(); 

     Toast.makeText(ShowListActivity.this, R.string.deleted, Toast.LENGTH_SHORT).show(); 
    } 

這是我的logcat

10-17 19:10:3​​2.621:E/InputEventReceiver(25683):異常分派 輸入事件。 10-17 19:10:3​​2.621:E/MessageQueue-JNI(25683):異常 MessageQueue回調:handleReceiveCallback 10-17 19:10:3​​2.641: E/MessageQueue-JNI(25683):java.lang.NullPointerException 10 -17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at tbj.android.basketballstatistics.ShowListActivity.function2(ShowListActivity.java:92) 10-17 19:10:3​​2.641:E/MessageQueue- JNI(25683):at tbj.android.basketballstatistics.ShowListActivity.onContextItemSelected(ShowListActivity.java:79) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.app.Activity。 onMenuItemSelected(Activity.java:2620)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.policy.impl.PhoneWindow $ DialogMe nuCallback.onMenuItemSelected(PhoneWindow.java:4129) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741 ) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 10-17 19:10: 32.641:E/MessageQueue-JNI(25683):at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683) ):at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal .view.menu.MenuDialogHelper .onClick(MenuDialogHelper.java:167) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.app.AlertController $ AlertParams $ 3.onItemClick(AlertController.java:941 ) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.widget.AdapterView.performItemClick(AdapterView.java:298) 10-17 19:10:3​​2.641:E/MessageQueue- JNI(25683):at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.widget.AbsListView $ PerformClick。運行(AbsListView.java:2911) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.widget.AbsListView.onTouchUp(AbsListView.java:3657)10-17 19: 10:32.641:E/MessageQueue-JNI(25683):at android.widget.AbsListView.onTouchEvent(AbsListView.java:3436)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.View.Group.dispatchTransformedTouchEvent(ViewGroup.java:2210) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945)10-17 19:10:32。641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android。 view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10- 17:19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683) :at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.Vi ewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19 :10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:2329) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568) 10-17 19:10:3​​2.641 :E/MessageQueue-JNI(25683):at android.app.Dialog.dispatchTouchEvent(Dialog.java:746)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at com.android .internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2277) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.View.dispatchPointerEvent(View。 java:7893)10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950) 10-17 19:10:3 2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3829) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java :3445) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:3​​2.641: E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3521) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl。 java:3578) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:3​​2.641 :E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android .view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl。java:3422) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:3​​2.641 :E/MessageQueue-JNI(25683):at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5535) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view .ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5515) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5486) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5615) 10-17 19:10:3​​2.641:E/M essageQueue-JNI(25683):at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 10-17 19:10:3​​2.641:E/MessageQueue-JNI(25683):at android.os.MessageQueue。 nativePollO 10-17 19:10:3​​2.641: D/AndroidRuntime(25683):關閉VM 10-17 19:10:3​​2.641: W/dalvikvm(25683):threadid = 1:線程退出時未捕獲異常 (group = 0x41642db8)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):致命 EXCEPTION:main 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):進程: tbj.android.basketballstatistics,PID :25683 10-17 19:10:3​​2.641: E/AndroidRuntime(25683):java.lang.NullPointerException 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at tbj.android.basketballstatistics.ShowListActivity.function2(ShowListActivity.java:92) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at tbj.android.basketballstatistics.ShowListActivity.onContextItemSelected(ShowListActivity.java: 79) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.app.Activity.onMenuItemSelected(Activity.java:2620)10-17 19:10:3​​2.641:E/AndroidRuntime(25683) ):at com.android.internal.policy.impl.PhoneWindow $ DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4129) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal .view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.view.menu。 MenuBuilder.performItemAction(MenuBuilder.java:884) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.app.AlertController $ AlertParams $ 3.onItemClick(AlertController.java:941) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.widget .Ada pterView.performItemClick(AdapterView.java:298) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.widget.AbsListView.performItemClick(AbsListView.java:1113) 10-17 19:10 :32.641:E/AndroidRuntime(25683):at android.widget.AbsListView $ PerformClick.run(AbsListView.java:2911) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.widget .AbsListView.onTouchUp(AbsListView.java:3657)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.widget.AbsListView.onTouchEvent(AbsListView.java:3436)10-17 19: 10:32.641:E/AndroidRuntime(25683):在 android.view.View.dispatchTouchEvent(View.java:7713)10-17 19:10:32。641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup。 dispatchTouchEvent(ViewGroup.java:1945)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641 :E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.disp atchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641 :E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641: E/AndroidRuntime(25683):at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:3​​2.641:E/An droidRuntime(25683):at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959)10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.policy.impl。 PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow.java:2329) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568 ) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.app.Dialog.dispatchTouchEvent(Dialog.java:746)10-17 19:10:3​​2.641:E/AndroidRuntime(25683) :at com.android.internal.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2277) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at(ViewRootImpl.java:3950)android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950)1017 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3829) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683) ):at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl .java:3445) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ InputStage.for病房(ViewRootImpl.java:3414) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3521) 10-17 19:10 :32.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view .ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3578) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3395) 10 -17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:32。android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view。 (ViewRootImpl.java:3422) 10-17 19:10:3​​2.641:E/17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5535) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android .view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5515) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl.enque ueInputEvent(ViewRootImpl.java:5486) 10-17 19:10:3​​2.641:E/AndroidRuntime(25683):at android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5615) 10-17 19:10 :32.641:E/AndroidRuntime(25683):在 android.view.InputEventReceiver.dispatchInput

+0

你能顯示日誌輸出,所以我們可以有一個更好的想法的錯誤? – j2emanue 2014-10-17 17:01:58

+0

@ j2emanue我的logcat現在可用 – Thor1401 2014-10-17 17:12:42

+0

在執行function2時出現NullPointerException,因此請在此函數上使用調試。你是否獲得了textview的參考?在列表視圖上使用OnItemLongClickListener獲取產品名稱。 – 2014-10-17 17:37:57

回答

0

我認爲你可以保存在一個全局變量長壓排的位置,可以說私人詮釋POS; ,並在setOnItemLongClickListener POS =指數則在函數2得到您使用使用POS

希望填補ListView控件數組中的產品名稱,這將有助於

1

這是很難知道是怎麼回事錯在這裏,因爲我們不不知道哪些行號對應於您所包含的代碼行。但給你一個我將如何解決這個問題的出發點:

通常,當一個Android應用程序崩潰時,你想搜索你的日誌的地方FATAL EXCEPTION:。在這種情況下,Android會告訴你,打破所有事件的事件是文件ShowListActivity.java中第92行的NullPointerException。所以你應該看看那裏,看看它可能有什麼問題。

我的猜測是,你錯誤地使用了item.getActionView()。我想你要做的是獲取用戶試圖刪除的TextView;但item未提及用戶試圖刪除的「項目」,而是用戶點擊的MenuItem以告訴應用程序刪除該列表成員。

getActionView()也不會返回除null以外的任何內容,除非您先前在該MenuItem上調用了setActionView();如果你想設置一些非常複雜的視圖來表示該動作(圖標或文本字段並不複雜,就我所說的內容而言),那麼你會想要這樣做的唯一原因就是如果你想要做到這一點。

正確的做法是爲用戶在創建上下文菜單時用戶將要在上執行的項目存儲某種標識符,然後用戶選擇如何處理該內容菜單, ;也許在某種成員變量中。然後告訴你的function2方法使用該標識符行事。

+0

一般來說,你已經實現了這個上下文菜單的方式非常非正統,並且會給你自己帶來很多額外的工作。例如,您不應該在'onCreateContextMenu'中定義菜單選項,而應該在外部XML文件中定義。您應該考慮查看Context Menus上的Android文檔:http://developer.android.com/guide/topics/ui/menus.html#context-menu – sigmabeta 2014-10-17 18:10:45

相關問題