2

ユーザーは、リストビューの一連のオプションから回答を選択します。提出した後(正しいか間違っているか)、リストビューで正解を強調表示するつもりです。

私はそれを理解したと思った:

 // get the position from the array we fed into the list view that has the correct answer    
int correct = curquestion.GetIndexOfCorrectAnswer();
// set that item's background to yellow
lView.getChildAt(correct).setBackgroundColor(Color.YELLOW);

しかし、この実行を見て、他の人の投稿を読んで、getChildAtが信頼できる結果を提供しないことを発見しました。黄色に設定するために、ランダムな子を選択するように見えることがあります。他のアプローチに関する提案はありますか?

4

4 に答える 4

1

色を設定するリスト項目の位置を入力してください:

 adapter.setSelectedPosition(position);
 adapter.setNotifyOnChange(true);
 listView.invalidate();

そしてアダプタークラスで:

// 選択された状態に基づいて行の色を変更します

if(selectedPos == position){
    label.setBackgroundColor(Color.YELLOW);
 }else{
    label.setBackgroundColor(Color.TRANSPARENT);
 }

お役に立てれば。

于 2012-07-24T05:49:14.110 に答える
0

興味のある方のために、最終的なコードをここに投稿します。

        lView.setEnabled(false);
        btnsubmit.setEnabled(true);
        int correct = curquestion.GetIndexOfCorrectAnswer();

        // tell the system the correct answer
        adapters.SetSelectedPosition(correct);
        //adapters.setNotifyOnChange(true);
        adapters.notifyDataSetChanged();

上記のコードはアクティビティで呼び出され、以下はハンドラーのカスタム クラスです。あなたがおそらく理解できる他のxmlピース。

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.TextView;
import com.example.walpdroid2.R;

public class QuizDataAdapter extends ArrayAdapter<Answer>
{
Answer [] objects = null;
Context checkcontext;
int _selectedIndex;
int checkedviewresourceid;
int uncheckedviewresourceid;

int selectedPos = -1;

public QuizDataAdapter(Context checkcontext, int checkresourceid, int uncheckresourceid, Answer[] objects)
{
    super(checkcontext, checkresourceid, objects);
    this.checkedviewresourceid = checkresourceid;
    this.uncheckedviewresourceid = uncheckresourceid;
    this.checkcontext = checkcontext;
    this.objects = objects;

}

public int getCount()
{
    return this.objects.length;
}

public Answer getItem(int position)
{
    return this.objects[position];
}

public long getItemId(int position)
{
    return position;
}

public void setSelected(int index) {

      if (index == -1) {
        // unselected
      }
      else {
        // selected index...
      }

      _selectedIndex = index;

      // notify the model that the data has changed, need to update the view
      notifyDataSetChanged();

}

public void SetSelectedPosition(int pos)
{
    this.selectedPos = pos;
}

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View row = convertView;
    CheckedTextView holder = null;

    if((row == null) || (selectedPos == position))
    {
        LayoutInflater inflater = ((Activity)checkcontext).getLayoutInflater();

        if(selectedPos == position)
        {
            row = inflater.inflate(checkedviewresourceid, parent, false);
            holder = (CheckedTextView)row.findViewById(R.id.CheckRow);
        }
        else
        {
            row = inflater.inflate(uncheckedviewresourceid, parent, false);
            holder = (CheckedTextView)row.findViewById(R.id.UnCheckRow);                
        }

        holder.setText(objects[position].getAnswer());
        row.setTag(holder);
    }
    else
    {
        holder = (CheckedTextView)row.getTag();
        holder.setText(objects[position].getAnswer());
    }


    return row;
}

}

于 2012-08-18T03:37:57.230 に答える
0

onSubmit ボタンをクリックして次のコードを設定します -1 で初期化されたアクティビティのフィールドとして正しい整数変数を持ちます。

// get the position from the array we fed into the list view that has the correct answer    
correct = curquestion.GetIndexOfCorrectAnswer();
adapter.notifyDataSetInvalidated();

アダプタの getView で次の操作を行います。

if(position==correct){
    label.setBackgroundColor(Color.YELLOW);
 }
于 2012-07-24T06:01:30.787 に答える
0

メソッドを使用してオブジェクトに登録するOnItemClickListener抽象クラス ( link )を実装する必要があります。また、コールバック メソッドでは、ユーザーが正しい回答を選択したかどうかをテストできます。ユーザーがクリックしたビューがあるので、黄色に色付けできます。ListViewsetOnItemClickListener()onItemClick(AdapterView<?> parent, View view, int position, long id)

于 2012-07-24T05:43:17.760 に答える