3

我将一些自定义项目放在我的 ActionBarSherlock AB 中,如下所示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);
}

单击自定义项时既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 导入的。

关于这里有什么问题的任何想法?

4

1 回答 1

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;
于 2013-04-23T21:04:58.653 回答