1

我是安卓新手。。

如何将哈希图值转换为 ArrayList .. 我的问题是...现在我有一个哈希图,其中包含我的所有数据(问题 ID、问题、带有多个选项的答案)。

现在我想要做的是...我需要在文本视图中显示问题,并根据 questionid 在单选按钮中显示答案,并且我有下一个按钮,用于根据 questionid 显示下一个问题和答案。

所以同时我点击下一个按钮我应该增加问题ID并显示问题和答案,与上一个按钮相同......请帮助我。我是android新手..提前非常感谢...

哈希图

          String questionid = c.getString(TAG_QUESID);
          String question = c.getString(TAG_QUES);
          String answer = c.getString(TAG_ANSW);
          HashMap<String, String> map = new HashMap<String, String>();
          map.put(TAG_QUESID, questionid);
          map.put(TAG_QUES, question);
          map.put(TAG_ANSW, answer);
          System.out.println("QuestionIDMap:"+map);

布局

  <TextView
    android:id="@+id/que_txt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="59dp"
    android:layout_marginTop="36dp"
    android:text="TextView" />

 <RadioGroup
     android:id="@+id/rdgroup"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_alignParentLeft="true"
     android:layout_below="@+id/que_txt"
     android:layout_marginTop="38dp"
     android:orientation="vertical" >

     <RadioButton android:id="@+id/RB1" android:text="button1"/>

     <RadioButton android:id="@+id/RB2" android:text="button2"/>

     <RadioButton android:id="@+id/RB3" android:text="button3"/>

     <RadioButton android:id="@+id/RB4" android:text="button4"/>
 </RadioGroup>

 <TextView
     android:id="@+id/rdtxt"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:layout_below="@+id/rdgroup"
     android:layout_marginTop="38dp"
     android:text="Answer: Nothing is picked">

 </TextView>

 <Button
     android:id="@+id/prv_btn"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignBottom="@+id/nxt_btn"
     android:layout_alignParentLeft="true"
     android:layout_marginLeft="18dp"
     android:text="Previous" />

 <Button
     android:id="@+id/nxt_btn"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_alignParentRight="true"
     android:layout_below="@+id/rdtxt"
     android:layout_marginRight="50dp"
     android:layout_marginTop="34dp"
     android:text="Next" />
4

1 回答 1

-1

我担心您的示例可能有点复杂,无法立即获得答案。此外,如果我正确理解了您的问题,我个人认为您的设计存在缺陷。让我们从个别问题和简单答案开始。

如何将 hashmap 值转换为 ArrayList[?][...]

Java HashMaps 有一个简单的方法values(),可以将 HashMap 中的所有值转换为 Collection。当您使用泛型时,假设您的示例中的地图,执行以下操作应该没有问题:

ArrayList<String> valueList = map.values();

如果您想知道,存在类似的密钥方法。它被调用keySet()并将返回一个与 Collection 有点不同的 Set。要将其转换为列表,我建议您阅读“将集合转换为列表而不创建新列表”。您的问题的另一个相关主题是处理该方法的“Java Hashmap values to Array” 。values()

[...]如何在单独的字符串中获取哈希图值以设置问题的文本视图和答案的无线电文本[?] [...]

你的问题有点不清楚。你想提供多个答案吗?你的例子没有清楚地表明它。另外,我不相信 Android 中存在“radiotext”元素。

[...]我想在单击下一个按钮时增加(questionid)arrayList。这个怎么做?[...]

这个问题让我觉得你在某个地方预定义了你的问题,并希望用答案填充 HashMap。我将解释我认为如何做到最好。如果不是这种情况,请随时发表评论,提供更准确的需求描述,我会尽快回复您。

在 android 中,您可以使用strings.xml文件res\values夹中的文件预定义字符串。我建议的是,如果问题没有改变,请在此处定义它们。现在,在创建布局后,您已经可以使用android:text元素在布局 XML 文件中设置问题。您可以按如下方式使用它:

<TextView
    android:id="@+id/your_text_view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Your question should go here!" />

当然,您也可以在使用以下方法初始化视图时以编程方式执行此操作:

TextView yourTextView =(TextView) findViewById(R.id.your_text_view);
yourTextView.setText("Your question should go here!");

为了得到你的答案,你希望用户在每个答案之后或问卷结束时点击一个按钮。本教程向您展示了如何做到这一点。在 的实现中OnEditorActionListener,您可以检索每个字段的内容并将其放入数组中。由于您确实为您的字段提供了 ID,因此匹配问题和答案应该没有任何问题。

这给我们留下了一个问题,计算问题,给他们一个 ID,并跟踪 ID。这对您的设计来说有点麻烦。让我们回顾一下:

HashMap<String, String> map = new HashMap<String, String>();
map.put(TAG_QUESID, questionid);
map.put(TAG_QUES, question);
map.put(TAG_ANSW, answer);

使用这种设计,您的钥匙必须是独一无二的。这意味着如果键是常量,您始终只能有一个问题和答案。我建议您使用复杂对象来存储问题和答案,并使用HashMap<String, QuestionnaireItem>例如其中 String 是您的 Id 而 theQuestionnaireItem是您的复杂对象。或者,您可以使用多层 HashMap 但这会很快让人感到困惑;HashMap<String, HashMap<String, String>. 至于计数,当您用答案填充地图时,只需保留一个计数器并在每次添加元素时递增它。

如果您能够提供更好的问题描述,我很乐意为您提供帮助。

更新 通过改进的描述,我能够提供更多信息。

首先,您应该在布局文件中定义了 aTextView和 a 。RadioGroup然后,您应该在创建视图时加载了布局。所有基本的Android东西。对于以下示例,我假设您有问题和答案,只需要知道如何设置它们以及如何继续下一组问题和答案。这是你如何做到的。

当您扩展布局时,在退出onCreate(Bundle savedInstanceState)方法之前,您要设置初始问题和答案。为此,只需TextView分别RadioButton使用该findViewById(R.id.the_views_id)方法即可。不要忘记演员表。

RadioButton radioButton1 = (RadioButton)findViewById(R.id.RB1);

分别

TextViewradioButton1 = (TextView)findViewById(R.id.que_txt);

现在你需要做的就是调用方法来设置视图的文本,setText("Your string!")

现在,要继续下一个问题,您可以实现此单选按钮教程中突出显示的以下方法。

public void onRadioButtonClicked(View view)
{
    counter++;
    nextQuestion(counter);
}

这假设您有一个静态计数器变量初始化为 0。

public void nextQuestion(counter)
{
    // Here you set the values of the buttons and textview to the values in the arrays
    // at the index provided by the counter. Alternatively you can use the 
    // String.parseInt(counter) method to get a string which you could use as the ID
    // of the question and therefore key to your HashMap.
}
于 2013-01-29T07:21:26.513 回答