【问题标题】:How to add view to cardview inside livedata observer如何在 livedata 观察者内向 cardview 添加视图
【发布时间】:2020-04-07 12:26:06
【问题描述】:

我正在尝试将一些单选按钮添加到卡片视图中。这是我的代码:

MainActivity.java

cardView = findViewById(R.id.card_view);
mGameViewModel.setUpGame().observe(this,this::loadRound);

private void loadRound(List<Smiley> smileys) {
    if (smileys == null) {
        return;
    }
    mAnswersView.loadAnswers(smileys, cardView);
    mGameViewModel.startNewGameRound();
}

AnswerView

public void loadAnswers(List<Smiley> smileys, CardView cardView) {
    if (smileys == null) {
        return;
    }
    removeAllViews();
    LayoutInflater inflater = LayoutInflater.from(getContext());

    for (Smiley smiley : smileys) {
        RadioButton button = (RadioButton) inflater.inflate(R.layout.answer_item, this, false);
        button.setText(smiley.getName());
        button.setTag(R.string.answer_tag, smiley.getCode());
        cardView.addView(button);
    }
}

但这似乎不起作用。请问有什么办法吗?

编辑: 这里的问题是我尝试创建的单选按钮没有显示。我已经进行了一些调试,并且在 addView 方法之前调用了所有方法。但是当我查看设备时,没有“扩展”视图,在这种情况下,根本没有单选按钮。

【问题讨论】:

  • 在此处传递 'cardView' 而不是 'this' 并尝试:inflater.inflate(R.layout.answer_item, cardView, false);
  • 还是一样的:(
  • 解释发生了什么。它崩溃了吗?或者屏幕上什么也没有发生?并且,添加日志或进行调试并检查是否调用了 loadRound。检查收到的列表笑脸的大小。将您的布​​局 R.layout.answer_item 放入示例活动中并检查它是否正确。
  • 我已经编辑了我的帖子,谢谢
  • 检查您是否使用布局 R.layout.answer_item 作为活动的布局,如果它显示单选按钮。如果不是,则问题出在您的布局中。

标签: java android layout view


【解决方案1】:

所以,我通过在 CardView 中使用 LinearLayout 解决了这个问题。然后我将 LinearLayout 解析为 loadAnswer() 函数,剩下的就是:

RadioButton button = (RadioButton) inflater.inflate(R.layout.answer_item, linearLayout, false);
button.setText(smiley.getName());
button.setTag(R.string.answer_tag, smiley.getCode());
linearLayout.addView(button);

从这个案例中,我了解到我们不能直接将视图添加到 CardView。您可以通过在 CardView 内创建一个 LinearLayout 以在 CardView 内以编程方式添加自定义小部件来实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2018-07-22
    • 1970-01-01
    相关资源
    最近更新 更多