Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android定制ArrayAdapter,只有2个视窗_Android_Listview_Android Arrayadapter - Fatal编程技术网

Android定制ArrayAdapter,只有2个视窗

Android定制ArrayAdapter,只有2个视窗,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,此自定义阵列适配到我的ListView会正确填充其字段,但它设置的颜色完全错误。 只有2个视图持有者正在创建,我在ListView中最多有10个元素,所以其他元素从已经创建的持有者中获取颜色。你能帮我怎么做吗 public class MistakesAdapter extends ArrayAdapter<Data> { static class ViewHolder { TextView question; TextView answer1; TextV

此自定义阵列适配到我的ListView会正确填充其字段,但它设置的颜色完全错误。 只有2个视图持有者正在创建,我在ListView中最多有10个元素,所以其他元素从已经创建的持有者中获取颜色。你能帮我怎么做吗

public class MistakesAdapter extends ArrayAdapter<Data> {

static class ViewHolder {
    TextView question;
    TextView answer1;
    TextView answer2;
    TextView answer3;
    TextView answer4;

    ViewHolder(View v){
        this.question = (TextView) v.findViewById(R.id.question);
        this.answer1 = (TextView) v.findViewById(R.id.answer1);
        this.answer2 = (TextView) v.findViewById(R.id.answer2);
        this.answer3 = (TextView) v.findViewById(R.id.answer3);
        this.answer4 = (TextView) v.findViewById(R.id.answer4);
    }
}

public MistakesAdapter(Context context, ArrayList<Data> data) {
    super(context, 0, data);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    Data data = getItem(position);
    ViewHolder holder;
    if (v == null) {
        v = LayoutInflater.from(getContext()).inflate(R.layout.mistakes_list,null);
        holder = new ViewHolder(v);
        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    try {
        holder.question.setText(data._question);
        holder.answer1.setText(data._answer1);
        holder.answer2.setText(data._answer2);
        holder.answer3.setText(data._answer3);
        holder.answer4.setText(data._answer4);
    } catch (Exception e) {
        e.printStackTrace();
    }
    if (!positionWas.contains(data._question)) {
        positionWas.add(data._question);
        colorTextViews(position, holder);
    }
    return v;
}

void colorTextViews(int position, ViewHolder holder) {

   for (int i = stopIndex; i < wrongAnswers.size(); i++) {
       if (wrongAnswers.get(i)) {
            Log.d(TAG, "position " + position + "i " + i);
            indexRight = answersId.get(position);
            indexWrong = userAnswers.get(position);
            stopIndex = i + 1;
            color(position, holder);
            break;
        }
    }
}

void color(int position, ViewHolder holder) {

    Log.d(TAG, "color position: " + position +  ", red: " + indexWrong + ", green " + indexRight);
    switch (indexRight) {
        case 1:
            holder.answer1.setTextColor(Color.GREEN);
            break;
        case 2:
            holder.answer2.setTextColor(Color.GREEN);
            break;
        case 3:
            holder.answer3.setTextColor(Color.GREEN);
            break;
        case 4:
            holder.answer4.setTextColor(Color.GREEN);
            break;
    }

    switch (indexWrong) {
        case 1:
            holder.answer1.setTextColor(Color.RED);
            break;
        case 2:
            holder.answer2.setTextColor(Color.RED);
            break;
        case 3:
            holder.answer3.setTextColor(Color.RED);
            break;
        case 4:
            holder.answer4.setTextColor(Color.RED);
            break;
    }
}

了解convertView的性质后,您必须确保在重用convertView之前重置所有可更改UI元素的样式,只有在更改视图的样式、颜色等时才有必要这样做,而视图是按行扩展的

因此,如果您确保始终执行“colorTextViewsposition,holder”,将其置于“if condition”之外,根据当前数据状态设置适当的颜色,它将按照您想要的方式工作

或者像这样简化:

    Answer correctAnswer = ...;

    holder.question.setText(data._question);
    holder.answer1.setText(data._answer1);
    holder.answer1.setTextColor(data._answer1.equals(correctAnswer)? Color.BLUE : Color.RED);
    holder.answer2.setText(data._answer2);
    holder.answer2.setTextColor(data._answer2.equals(correctAnswer)? Color.BLUE : Color.RED);
    holder.answer3.setText(data._answer3);
    holder.answer3.setTextColor(data._answer3.equals(correctAnswer)? Color.BLUE : Color.RED);
    holder.answer4.setText(data._answer4);
    holder.answer4.setTextColor(data._answer4.equals(correctAnswer)? Color.BLUE : Color.RED);

其中是colorTextViewsposition,holder;方法代码?你能提供吗?谢谢,伙计,这很有帮助。