fweigl
fweigl

Reputation: 22008

ClickListener on custom ActionBar Item (ActionBarSherlock)

I'm putting some custom items in my ActionBarSherlock AB like this in my SherlockFragmentActivity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

            getSupportMenuInflater().inflate(R.menu.menu_builtin, menu);

            MenuItem selectAll = menu.findItem(R.id.selectall);
            selectAll.setActionView(R.layout.selectalllayout);

            return super.onCreateOptionsMenu(menu);
}

Neither onMenuItemSelected nor onOptionsItemSelected are called when a custom item is clicked, they are when I add a 'standard item' with menu.add(String). I also tried:

    selectAll.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // TODO Auto-generated method stub
            return false;
        }
    }); 

and

    selectAll.getActionView().setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    }); 

they aren't called either. My layout components are made clickable and everthing that has to do with the menu is imported from ABS, not android.

Any ideas on what's wrong here?

Upvotes: 3

Views: 3287

Answers (1)

Codes12
Codes12

Reputation: 376

You can do it two ways

First:

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowCustomEnabled(true);

    View view = LayoutInflater.from(this).inflate(R.layout.your_layout, null);

    actionBar.setCustomView(view);
    view.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                    //Do your click stuff
            }
        });
    }

Second:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 <item
    android:id="@+id/view_id"
    android:title="@string/name"
    android:actionLayout="@layout/your_layout"
    android:showAsAction="always" />
 </menu>

In your activity

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getSupportMenuInflater().inflate(R.menu.main_menu, menu);
    View view = (View) menu.findItem(R.id.view_id).getActionView();

            // to get child view - example:
            //ImageView image  = (ImageView)view.findViewById(R.id.my_item);
            //image.setOnClickListener....

    view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //do stuff here
        }
    });

    return true;
}

Dont forget to import these.

  import com.actionbarsherlock.app.ActionBar;
  import com.actionbarsherlock.app.SherlockFragmentActivity;
  import com.actionbarsherlock.view.Menu;
  import com.actionbarsherlock.view.MenuItem;

Upvotes: 3

Related Questions