【问题标题】:Android: Get Spinner Data from a Recycler viewAndroid:从 Recycler 视图获取 Spinner 数据
【发布时间】:2018-08-12 05:02:50
【问题描述】:

我在应用程序中创建了一个反馈屏幕,用户必须在其中为每个问题(TextView)选择他们的意见(显示为Spinner)。 多个问题和选项将显示在RecylcerView 中。单击提交按钮时,我需要从回收站视图中获取所有数据(问题和选定微调器值)并发送到服务器。

我看到很多人建议在Spinner实施onItemSelectedListener。它不适合我,因为每个微调器都有默认值。此外,用户可能不会选择每个微调器。

如何在ViewHolderRecyclerView 中获取每个微调器(意见)和文本视图(问题)的值

【问题讨论】:

  • 到目前为止你实现了什么?
  • 您可以在主活动中添加侦听器或创建公共方法当Spinner项目选择更改时,您可以将数据发送到此方法 span>
  • @Ali Rahman 问题是用户不能选择任何微调器。他们可能只需单击Submit,因为微调器将具有默认值。在这种情况下,数据将为空
  • @kampangala 我们实现的是微调器上的 onclick 监听器
  • 我的意思是@Avinash 向我们展示您的实现,以便我们知道您实际得到什么以及您期望得到什么

标签: android android-layout android-recyclerview android-spinner


【解决方案1】:

第 1 步:您必须让 Model 类说 Question,如下所示

public class Question {
   String questionTitle;
   List<Answer> answerList;
   // getter/setter
}

public class Answer {
   boolean isSelected;
   boolean isDefault;
   // getter/setter
}

第 2 步:您必须将问题列表传递给您的适配器。在项目单击时,只需使用 answer.setSelected(true) 为特定问题设置答案即可。

第 3 步:在适配器类中创建一个方法,如下所示,它将为您提供所有问题的选定答案。

public Map<String,Answer> getSelectedAnswers() {
    Map<String,Answer> map = new HashMap();
    for(Question question : questionList){
         List<Answer> answers = question.getAnswerList();
         Answer defaultAnswer;
         for (Answer answer: answers){
           if(answer.isSelected()){
             map.put(question.questionTitle(),answer);
             defaultAnswer = null;
             break;
           } 
           if(answer.isDefault()) {
              defaultAnswer = answer;
           }
         }
         if(defaultAnswer != null) {
            map.put(question.questionTitle(),defaultAnswer);
         }
    }
    return map;
}

注意:如果要避免第 3 步,则在适配器本身中保留一个 Map&lt;String, Answer&gt; selectionMap,其中 key 将是问题和 value将是该问题的选定答案,并不断更新微调项选择。

第 4 步:在提交按钮上调用 API 时,您需要遍历 Map,然后将 API 期望的内容包装到必填字段中。

【讨论】:

  • 如果用户没有为问题选择任何答案怎么办?
  • 然后你会得到空地图。这是有道理的
  • 感谢您的详细回答和回复。除了设置 onclick 侦听器之外,我正在寻找其他方法来从 recyclerview 内的微调器(或任何其他输入小部件)获取数据。当用户单击提交按钮时,我需要在 recyclerview 中获取所有输入小部件(在本例中为微调器)的数据并将其发送到服务器。在您的回答中,再次使用了 onItemClickListener。
  • 是的,这取决于你!我没有看到添加点击监听器的任何问题。如果你想避免点击监听器,那么你肯定必须持有微调器列表并且需要迭代它们中的每一个。这不是在适配器类中保存视图列表的更好方法。
  • @Avinash 现在更新了答案方法,如果您没有选择任何答案并按下提交按钮,则可以获取默认答案。
猜你喜欢
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 2011-12-31
  • 2016-09-13
  • 2018-01-01
  • 2012-09-30
相关资源
最近更新 更多