1

私はAndroidが初めてです..

ハッシュマップ値をArrayListに変換する方法..私の問題は...すべてのデータ(質問ID、質問、複数のオプションを含む回答)を含むハッシュマップがあります。

今私がやりたいことは...質問をテキストビューに表示し、質問IDに基づいてラジオボタンに回答を表示する必要があります。また、質問IDに基づいて次の質問と回答を表示するための次のボタンがあります。

その間、次のボタンをクリックすると、前のボタンと同じように、質問IDを増やして質問と回答を表示する必要があります...助けてください。私はアンドロイドが初めてです..よろしくお願いします...

ハッシュマップ

          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

あなたの例は、すぐに答えを得るには少し複雑かもしれません。また、個人的には、質問を正しく理解していれば、デザインに欠陥があると思います。個々の質問と簡単な答えから始めましょう。

ハッシュマップ値をArrayListに変換する方法[?] [...]

Java HashMapsにはvalues()、HashMap内のすべての値をコレクションに変換するという簡単なメソッドがあります。ジェネリックスを使用したので、例のマップを想定すると、次のことを行うのに問題はありません。

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

不思議に思う場合に備えて、同様のキーの方法があります。これが呼び出されkeySet()、コレクションとは少し異なるセットが返されます。リストに変換するには、 「新しいリストを作成せずにセットをリストに変換する」を読むことをお勧めします。あなたの質問に関連するもう1つのスレッドは、メソッドを扱う「Java HashmapvaluestoArray」です。values()

[...]別の文字列でハッシュマップ値を取得して、質問のテキストビューと回答のラジオテキストを設定する方法[?] [...]

あなたの質問は少し不明確です。複数の回答を提供しますか?あなたの例はそれを明確に示していません。また、Androidには「radiotext」要素が存在するとは思いません。

[...]次のボタンをクリックしたときにarrayListをincrement(questionid)したい。これを行う方法?[...]

この質問により、質問はどこかに事前定義されており、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を追跡するという1つの問題が残ります。これはあなたのデザインでは少し面倒です。それを調べてみましょう:

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

この設計を使用するには、キーが一意である必要があります。つまり、キーが定数である場合、常に1つの質問と回答しか持てません。複雑なオブジェクトを使用して質問と回答を保存しHashMap<String, QuestionnaireItem>、たとえば、文字列がIDで、QuestionnaireItemが複雑なオブジェクトである場合を使用することをお勧めします。または、マルチレイヤーのHashMapを使用することもできますが、これは非常に高速で混乱を招きます。HashMap<String, HashMap<String, String>。カウントに関しては、マップに回答を入力するときは、単純にカウンターを保持し、要素を追加するたびにそれをインクリメントします。

より良い問題の説明を提供できれば、喜んでお手伝いさせていただきます。

更新 説明の改善により、より多くの情報を提供できるようになりました。

まず、レイアウトファイルでTextViewとを定義する必要があります。RadioGroup次に、ビューを作成するときにレイアウトをロードしておく必要があります。すべての基本的なAndroidのもの。次の例では、質問と回答があり、それらを設定する方法と、次の質問と回答のセットに進む方法を知っている必要があると思います。これがあなたのやり方です。

レイアウトを膨らませたら、onCreate(Bundle savedInstanceState)メソッドを終了する前に、最初の質問と回答を設定します。これを行うには、メソッドを使用してTextViewそれぞれを取得します。キャストを忘れないでください。RadioButtonfindViewById(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 に答える