2015-07-13 2 views
0

Я разрабатываю код, в котором контекстное меню должно появляться при длительном нажатии элемента списка. Это работало ранее, но не знает, почему это сейчас NPE. Посмотрите мой код ниже и предложите.onCreateContextMenu- NPE

public void displayImages(){ 
//some other functionality 
imageAdapter = new GoodAdapter(this, imageBeanArray); 
    list.setAdapter(imageAdapter); 
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 
    registerForContextMenu(list); 
} 

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

@Override 
public boolean onContextItemSelected(MenuItem item) { 
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); 
    final ImageBean imageBean = imageBeanArray.get(info.position); 
    final int selectedImageId= imageBean.getId(); 

    if(item.getTitle()=="Rename") {//Do some thing} 
    else if (item.getTitle()=="Rename") {//Do some thing else} 
} 

Компоновка Декларация Просмотр списка:

<?xml version="1.0" encoding="utf-8"?> 

<ListView 
    android:id="@+id/listView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/menu" 
    android:background="@color/white" 
    android:choiceMode="multipleChoice" 
    android:cacheColorHint="#00000000" 
    android:scrollbars="none" /> 

Logcat говорит:

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.kittu.ClientLync, PID: 30281 
    java.lang.NullPointerException 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.startActionMode(PhoneWindow.java:2694) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.startActionModeForChild(PhoneWindow.java:2619) 
      at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:675) 
      at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:675) 
      at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:675) 
      at android.view.View.startActionMode(View.java:4752) 
      at android.widget.AbsListView.performLongPress(AbsListView.java:3538) 
      at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:3494) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5487) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at  com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

Можете ли вы предоставить объявление компоновки своего списка ListView? –

+0

@PaulLammertsma: найдите XML-код макета. К сожалению, я не смог добавить его в виде XML-кода. Не знаю, почему. – Kittu

ответ

0

Похоже, что вы не можете использовать setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL) в сочетании с контекстным меню. Поскольку ваш формат XML уже (правильно) предоставляет android:choiceMode="multipleChoice", вы можете смело удалить переопределение кода в CHOICE_MODE_MULTIPLE_MODAL.

+0

Кажется, что вы прав. Код теперь отлично работает после удаления переопределения. Спасибо, бутон. Но есть ли какая-то логика? Просто интересно, не может ли быть случай, когда пользователь может выбрать несколько элементов (флажок), и один и тот же список может иметь контекстное меню поверх каждого элемента списка? любые мысли об этом ... – Kittu

Смежные вопросы