我在我的SherlockFragmentActivity
中将一些自定义项目放在我的ActionBarSherlock AB中:
@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);
}
单击自定义项时,不会调用onMenuItemSelected
或onOptionsItemSelected
,而是在我添加带有menu.add(String)的“标准项目”时。
我也尝试过:
selectAll.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// TODO Auto-generated method stub
return false;
}
});
和
selectAll.getActionView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
他们也没有被召唤。我的布局组件是可点击的,与菜单有关的外观是从ABS导入的,而不是android。
关于这里有什么问题的任何想法?
答案 0 :(得分:3)
你可以通过两种方式做到这一点
首先:
@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
}
});
}
第二
<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>
在您的活动中
@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;
}
别忘了导入这些。
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;