自定义ActionBar项目上的ClickListener(ActionBarSherlock)

时间:2013-03-11 14:33:55

标签: android android-actionbar actionbarsherlock

我在我的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);
}

单击自定义项时,不会调用onMenuItemSelectedonOptionsItemSelected,而是在我添加带有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。

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

1 个答案:

答案 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;