How to use ActionMode with "setOnItemClickListener" method in ListView-Android?

1.1k Views Asked by At

I have listView in my project there is an ActionMode that is shown as clicking on each listView's item.

I do something like this:

public class MyActivity extends Activity  {
...
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
...
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            public boolean onCreateActionMode(final ActionMode mode, Menu menu) {
                mode.setTitle("TITLE");
                getMenuInflater().inflate(R.menu.menu, menu);
                return true;
            }

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

            @Override
            public boolean onActionItemClicked(final ActionMode mode, MenuItem item) {
                switch (item.getItemId()) {
                   ...buttons like this
                    case R.id.doneBTN:


                        break;
                }
                return true;
            }

        }
    });

}

There are problems in RETURNs.this note shows for each RETURNs "Can not return a value from method with void return type"... so how can i solve it?

1

There are 1 best solutions below

1
On

It seems you've messed up the listeners quite a bit.

AdapterView.OnItemClickListener has only one method, namely onItemClick(). Take a look HERE for more info on that

To start the ActionMode you can use

activity.startActionMode(new MyActionModeListener())

Your listener can be something like this:

private class MyActionModeListener implements ActionMode.Callback {

    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = MyActivity.this.getSupportMenuInflater();
        inflater.inflate(R.menu.my_activity_action_mode, menu);
        return true;
    }

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

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

        switch (item.getItemId()) {
            // handle clicks here
        }

        mode.finish();
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {}
}

To actually start the ActionMode based on a list item click, use something like

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        MyActivity.this.startActionMode(new MyActionModeListener());
    }
}