【发布时间】:2014-10-17 16:41:13
【问题描述】:
我的代码有些问题。 在 listView 中,当我长按时会显示 ContextMenu。显示删除文件的选项。 但是当我在 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:32.621:E/InputEventReceiver(25683):异常调度 输入事件。 10-17 19:10:32.621:E/MessageQueue-JNI(25683):异常 在 MessageQueue 回调中:handleReceiveCallback 10-17 19:10:32.641: E/MessageQueue-JNI(25683):java.lang.NullPointerException 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 tbj.android.basketballstatistics.ShowListActivity.function2(ShowListActivity.java:92) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 tbj.android.basketballstatistics.ShowListActivity.onContextItemSelected(ShowListActivity.java:79) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.app.Activity.onMenuItemSelected(Activity.java:2620) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4129) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.widget.AdapterView.performItemClick(AdapterView.java:298) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.widget.AbsListView.performItemClick(AbsListView.java:1113) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.widget.AbsListView$PerformClick.run(AbsListView.java:2911) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.widget.AbsListView.onTouchUp(AbsListView.java:3657) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.widget.AbsListView.onTouchEvent(AbsListView.java:3436) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.View.dispatchTouchEvent(View.java:7713) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2210) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2329) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.app.Dialog.dispatchTouchEvent(Dialog.java:746) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2277) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.View.dispatchPointerEvent(View.java:7893) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3829) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5535) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5515) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5486) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5615) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 10-17 19:10:32.641:E/MessageQueue-JNI(25683):在 android.os.MessageQueue.nativePollO 10-17 19:10:32.641: D/AndroidRuntime(25683): 关闭 VM 10-17 19:10:32.641: W/dalvikvm(25683): threadid=1: 线程以未捕获的异常退出 (组=0x41642db8)10-17 19:10:32.641:E/AndroidRuntime(25683):致命 例外:主 10-17 19:10:32.641:E/AndroidRuntime(25683):进程: tbj.android.basketballstatistics, PID: 25683 10-17 19:10:32.641: E/AndroidRuntime(25683):java.lang.NullPointerException 10-17 19:10:32.641:E/AndroidRuntime(25683):在 tbj.android.basketballstatistics.ShowListActivity.function2(ShowListActivity.java:92) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 tbj.android.basketballstatistics.ShowListActivity.onContextItemSelected(ShowListActivity.java:79) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.app.Activity.onMenuItemSelected(Activity.java:2620) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4129) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:741) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:884) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.widget.AdapterView.performItemClick(AdapterView.java:298) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.widget.AbsListView.performItemClick(AbsListView.java:1113) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:2911) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.widget.AbsListView.onTouchUp(AbsListView.java:3657) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 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:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2216) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1959) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2329) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.app.Dialog.dispatchTouchEvent(Dialog.java:746) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2277) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.View.dispatchPointerEvent(View.java:7893) 10-17 19:10:32.641:E/AndroidRuntime(25683):在 android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3950) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3829) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3521) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3578) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3445) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3414) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3422) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3395) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5535) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5515) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5486) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5615) 10-17 19:10:32.641: E/AndroidRuntime(25683): 在 android.view.InputEventReceiver.dispatchInput
【问题讨论】:
-
你能显示日志输出以便我们更好地了解错误吗?
-
@j2emanue 我的 logcat 现在可用
-
执行function2时出现NullPointerException,所以在这个函数上使用调试。您是否获得了 textview 的参考?在列表视图上使用 OnItemLongClickListener 获取产品名称。