【问题标题】:ClickListener on custom ActionBar Item (ActionBarSherlock)自定义 ActionBar 项 (ActionBarSherlock) 上的 ClickListener
【发布时间】:2013-04-25 04:04:57
【问题描述】:

我在我的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 导入的。

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

【问题讨论】:

  • 你使用的是 Fragment 还是 Activity?
  • 这是一个 SherlockFragmentActivity。

标签: android android-actionbar actionbarsherlock


【解决方案1】:

你可以通过两种方式做到这一点

第一:

 @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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多