【问题标题】:How to enable menu item with a click of items of recycler view?如何通过单击回收站视图项目来启用菜单项?
【发布时间】:2018-05-04 13:43:11
【问题描述】:

我在 InterestsActivity 中有一个带有复选框的回收站视图,并且我想在选中至少 4 个复选框后启用工具栏上的 NEXT 按钮

NEXT 按钮在 onCreateOptionsMenu(菜单菜单)中被禁用

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_interests_button, menu);
    nextBtn = menu.findItem(R.id.action_button);
    nextBtn.setEnabled(false);

    return true;
}

我已经覆盖了 onPrepareOptionsMenu(菜单菜单)并尝试通过在我的 ViewHolder 项目的 onClick 中调用 invalidateOptionsMenu() 来启用菜单项。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);

    MenuItem item = menu.findItem(R.id.action_button);
    if(interestMap.size()>=4)
    item.setEnabled(true);

    return true;
}

我在 ViewHolder

中的绑定方法
public void bind(final Topic subject) {
        interestMap=new HashMap<>();
        mSubjectCheckbox.setText(subject.getSubjectName());
        mSubjectCheckbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                interestMap.put(subject.getSubjectName(),true);
                if(interestMap.size()>=4)
                    InterestsActivity.this.invalidateOptionsMenu();

            }
        });
    }

但是按钮没有被启用,我做对了还是遗漏了什么?

 @Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_button) {
        mFirebaseUtil.mFirestore.collection("users").document(FirebaseUtil.getCurrentUserId()).collection("interests").add(interestMap).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Intent setupIntent = new Intent(InterestsActivity.this, SetupActivity.class);
                startActivity(setupIntent);
                finish();
            }
        });
        return true;
    }

    return super.onOptionsItemSelected(item);
}

请帮我解决这个问题。提前致谢。

【问题讨论】:

  • 以哪种方式未启用?看得见吗?
  • @Gotiasits 它可见但已禁用(不可点击)。
  • 在这种情况下,分享你onOptionsItemSelected()的相关部分
  • @Gotiasits 更新为 onOptionsItemSelected()
  • 我看不出这段代码有什么问题,除非它是微不足道的,比如 interestMap.size() 永远不会达到大小 4,或者如果确实点击了菜单项,但 Firabase 失败了。您是否尝试在 onOptionsItemSelected() 中为有问题的项目添加输出到 logcat?

标签: android android-recyclerview android-menu android-viewholder


【解决方案1】:

这段代码似乎没有任何问题。

您应该检查条件interestMap.size()&gt;=4 是否获得正确的值,即您的interestMap 填充正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多