Reputation: 22008
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
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