Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android startSupportActionMode()引发NullPointerException_Android_Nullpointerexception_Android Toolbar_Appcompatactivity_Contextual Action Bar - Fatal编程技术网

Android startSupportActionMode()引发NullPointerException

Android startSupportActionMode()引发NullPointerException,android,nullpointerexception,android-toolbar,appcompatactivity,contextual-action-bar,Android,Nullpointerexception,Android Toolbar,Appcompatactivity,Contextual Action Bar,我正在AppCompatActivity中调用startSupportActionMode() 此活动是通过在Android Studio中单击“基本活动”创建的 它使用AppBarLayout和ToolBar创建ActionBar 以下是我的活动: import android.support.v7.view.ActionMode; public class ListActivity extends AppCompatActivity implements AdapterView.OnIt

我正在
AppCompatActivity
中调用
startSupportActionMode()

此活动是通过在Android Studio中单击“基本活动”创建的

它使用
AppBarLayout
ToolBar
创建
ActionBar

以下是我的活动:

 import android.support.v7.view.ActionMode;
 public class ListActivity extends AppCompatActivity implements AdapterView.OnItemClickListener,AdapterView.OnItemLongClickListener, ActionMode.Callback{

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(view -> {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    });

    Button buttonLoadResult = findViewById(R.id.buttonLoadResult);
    buttonLoadResult.setOnClickListener(v -> {
        Intent intent = new Intent(ListActivity.this, MainActivity.class);
        startActivity(intent);
    });

    emptyStateLayout = findViewById(R.id.layoutEmptyState);
    listAdapter = new ListAdapter(this, getFileList());
    listView = findViewById(R.id.listViewResultList);
    listView.setOnItemClickListener(this);
    listView.setOnItemLongClickListener(this);
    listView.setAdapter(listAdapter);
    listView.setLongClickable(true);
    listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);

    setAppropriateViews();
}

//Some codes...

 @Override
 public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    listView.setItemChecked(position,true);
    if (activeMode == null) {
        activeMode = this.startSupportActionMode(this);
        return true;
    }
    return false;
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    getMenuInflater().inflate(R.menu.menu_action_mode, menu);
    return true;
}

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    return false;
}

@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
    return false;
}

@Override
public void onDestroyActionMode(ActionMode mode) {
    activeMode = null;
}
}
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.ActionMode$Callback.onCreateActionMode(android.view.ActionMode, android.view.Menu)' on a null object reference
    at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onCreateActionMode(DecorView.java:2286)
    at android.support.v7.view.SupportActionModeWrapper$CallbackWrapper.onCreateActionMode(SupportActionModeWrapper.java:157)
    at android.support.v7.app.AppCompatDelegateImplV9$ActionModeCallbackWrapperV9.onCreateActionMode(AppCompatDelegateImplV9.java:1793)
    at android.support.v7.app.AppCompatDelegateImplV9.startSupportActionModeFromWindow(AppCompatDelegateImplV9.java:824)
    at android.support.v7.app.AppCompatDelegateImplV9.startSupportActionMode(AppCompatDelegateImplV9.java:707)
    at android.support.v7.app.AppCompatDelegateImplV14$AppCompatWindowCallbackV14.startAsSupportActionMode(AppCompatDelegateImplV14.java:292)
    at android.support.v7.app.AppCompatDelegateImplV23$AppCompatWindowCallbackV23.onWindowStartingActionMode(AppCompatDelegateImplV23.java:66)
    at android.support.v7.view.WindowCallbackWrapper.onWindowStartingActionMode(WindowCallbackWrapper.java:160)
    at com.android.internal.policy.DecorView.startActionMode(DecorView.java:835)
    at com.android.internal.policy.DecorView.startActionModeForChild(DecorView.java:816)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:828)
    at android.view.View.startActionMode(View.java:5828)
    at android.view.View.startActionMode(View.java:5812)
    at android.widget.AbsListView.performLongPress(AbsListView.java:3222)
    at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:3148)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6119)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

我为什么会收到
NullPointerException

我的错误被发现,原因是以下几行

listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
当我把它改成

listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);

但是我仍然不明白为什么它会抛出
NullPointerException
,为什么
CHOICE\u MODE\u MULTIPLE\u model
调用
onCreateActionMode()

共享您的界面