【问题标题】:ToolBar's Menu item is not clickable工具栏的菜单项不可点击
【发布时间】:2017-05-31 02:52:17
【问题描述】:

ToolBar上有购物车图标。当我尝试点击时,它很长时间没有显示任何动作。继续点击后,我设置的Toast消息被启用或应用程序崩溃。

请帮我解决它。

我的代码是:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView();
        mCounter = (TextView) badgeLayout.findViewById(R.id.counter);
        badgeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "Cart is Working", Toast.LENGTH_SHORT).show();
                Intent next = new Intent(context, ProductActivity.class);
                startActivity(next);
            }
        });
return true;
}

更新:

     public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, SearchView.OnCloseListener, SearchView.OnQueryTextListener {
            public static final String MyPREFERENCES = "Preference";
            public static final String SEARCHING_DATA = "DATA_SEARCH";
            public static String strTabName;
            public static TextView mCounter;
            public static RelativeLayout badgeLayout;

            public ArrayList<String> values;
            Toolbar toolbar;
            Context context;
            Config config;
            ArrayList<String> tabName = new ArrayList<String>();
            SharedPreferences pref;
            TextView txtDash_Title, txtDash_Des;
            String passQuery;
            FragmentManager mFragmentManager;
            FragmentTransaction mFragmentTransaction;
            String possibleEmail;
            String GOOGLE_USERNAME;
            private int count = 0;
            private GoogleApiClient client;

            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                context = this;

                pref = context.getSharedPreferences(MyPREFERENCES, MODE_PRIVATE);
                setupToolbar();
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
                drawer.setDrawerListener(toggle);
                toggle.syncState();

                NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
                navigationView.setNavigationItemSelectedListener(this);

                txtDash_Title = (TextView) findViewById(R.id.dashboard_txt_title);
                txtDash_Des = (TextView) findViewById(R.id.dashboard_txt_des);

                TextView myTextview = (TextView) findViewById(R.id.textView);
                if (haveNetworkConnection())
                    new TabNameSync().execute();
                else
                    Toast.makeText(context, "No Network Connection", Toast.LENGTH_SHORT).show();
                setupCollapsingToolbar();
                getGOOGLEUSERNAME();

            }

            private void getGOOGLEUSERNAME() {
                Cursor c = getApplication().getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
                c.moveToFirst();
                GOOGLE_USERNAME = c.getString(c.getColumnIndex("display_name"));
                Log.e("Google Username", GOOGLE_USERNAME);
                c.close();
            }

            private void setupCollapsingToolbar() {
                final CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(
                        R.id.collapse_toolbar);

                collapsingToolbar.setTitleEnabled(false);
            }

            private void setupToolbar() {
                toolbar = (Toolbar) findViewById(R.id.toolbar);
                setSupportActionBar(toolbar);
                getSupportActionBar().setTitle("Welcome to Scoop Shop!");
            }

            @SuppressWarnings("StatementWithEmptyBody")
            @Override
            public boolean onNavigationItemSelected(MenuItem item) {
                int id = item.getItemId();

                if (id == R.id.nav_camera) {
                } else if (id == R.id.nav_gallery) {

                } else if (id == R.id.nav_slideshow) {

                } else if (id == R.id.nav_manage) {

                } else if (id == R.id.nav_share) {

                } else if (id == R.id.nav_send) {

                }

                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                drawer.closeDrawer(GravityCompat.START);
                return true;
            }

            @Override
            public boolean onCreateOptionsMenu(Menu menu) {
                getMenuInflater().inflate(R.menu.main, menu);
                badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView();
                mCounter = (TextView) badgeLayout.findViewById(R.id.counter);
                badgeLayout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Toast.makeText(context, "Cart Working", Toast.LENGTH_SHORT).show();
                        Intent next = new Intent(context, ProductActivity.class);
                        startActivity(next);
                    }
                });
        //        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        //        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        //        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        //        searchView.setSubmitButtonEnabled(false);
        ////        searchView.getOutlineProvider();
        //        searchView.setOnQueryTextListener(this);
        //        searchView.setOnCloseListener(this);
                //       return super.onCreateOptionsMenu(menu);
                return true;
            }

            @Override
            public boolean onOptionsItemSelected(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.action_search:
                        break;
                    case R.id.badge:
                        Toast.makeText(context, "Cart is Working", Toast.LENGTH_SHORT).show();
               /*         Intent next = new Intent(context, ProductActivity.class);
                        startActivity(next);*/
                        return true;
                    default:
                        return super.onOptionsItemSelected(item);
                }
                return super.onOptionsItemSelected(item);
            }
    }

【问题讨论】:

标签: android android-toolbar cart


【解决方案1】:

问题可能已经关闭,但我找到了可能的原因:

  • 如果您在 .xml 文件中使用了相对布局,则相邻元素可能会覆盖您的工具栏。 因此,您的工具栏必须位于 .xml 文件中的视图顶部。 它对我有用。

【讨论】:

    【解决方案2】:

    你应该选择OnOptionsItemSelected()

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.badge:
                Toast.makeText(context, "Cart is Working", Toast.LENGTH_SHORT).show();
                Intent next = new Intent(context, ProductActivity.class);
                startActivity(next);
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    

    欲了解更多信息,请查看此链接:http://developer.android.com/guide/topics/ui/menus.html

    【讨论】:

    • @ParamaSudha 你能粘贴整个活动代码吗?
    • 是的。请等待几分钟@Chintan
    • 更新了@Chintan Soni
    【解决方案3】:

    问题可能是您在单击badge 时没有调用super.onOptionsItemSelected(item)。改变你的方法如下:-

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
           super.onOptionsItemSelected(item)
           switch (item.getItemId()) {
                case R.id.action_search:
                     break;
                case R.id.badge:
                     Toast.makeText(context, "Cart is Working", Toast.LENGTH_SHORT).show();
                /* Intent next = new Intent(context, ProductActivity.class);
                       startActivity(next);*/
                       break;
                 default:
                       break;
                }
                return true;
         }
    

    【讨论】:

    • 你能发布你的xml吗?
    • 我的 xml 在这里..以下链接。 @Frosty
    • 我检查了你的 xml。我假设您必须在badge_layout.xml 中将RelativeLayout 的ID 指定为badge。而不是在ImageView中设置android:clickable="true",而是在父RelativeLayout上设置它。并且在onCreateOptionsMenu方法上调用return super.onCreateOptionsMenu(menu);而不是return true
    • 即使我在相对布局中使用 android:clickable="true",但没有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多