-1

私は SimpleAdapter を使用して ListView にデータを入力しています。すべての行には TextView と RadioGroup ボタンの 2 つのボタンがあります。ボタン A をクリックするとコードでわかるように、ボタン A を強調表示するように設定し、TextView を 1 に設定し、テキスト ラジオ ボタン A を 1 に設定します。ボタン B をクリックすると、その逆になります。しかし、スクロールするとすべての値が消えます。下。私が従った答えの1つは、ListViewのリサイクルメカニズムが成功せずに機能する方法です。

@Override
public View getView(final int position, View convertView, ViewGroup parent){
View v = convertView;
System.out.println("getView " + position + " " + v);
ViewHolder holder = null;

if(v == null){
    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    v = vi.inflate(R.layout.lv_test, null);

    holder = new ViewHolder();

    holder.btnA = (Button) v.findViewById(R.id.btn_a);
    holder.btnB = (Button) v.findViewById(R.id.btn_b);
    holder.tvPick = (TextView) v.findViewById(R.id.pick);

    holder.radioPickGroup = (RadioGroup)v.findViewById(R.id.rg);
    holder.rb_a = (RadioButton)v.findViewById(R.id.rb_a);
    holder.rb_b = (RadioButton)v.findViewById(R.id.rb_b);

    v.setTag(holder);

} else {
    holder = (ViewHolder)v.getTag();
}

holder.btnA.setText(pickList.get(position).get(TAG_A));
holder.btnA.setTypeface(OpenSans);

holder.btnB.setText(pickList.get(position).get(TAG_B));
holder.btnB.setTypeface(OpenSans);

holder.tvPick.setText(pickList.get(position).get(TAG_PICK));
holder.tvPick.setTypeface(OpenSans);


final String thePick = holder.tvPick.getText().toString();
        if (thePick.equals("1")){
            holder.btnA.setBackgroundResource(R.drawable.btn1_highlight);
            holder.rb_a.setChecked(true);
            holder.rb_b.setChecked(false);
        } else if (thePick.equals("2")){
            holder.btnB.setBackgroundResource(R.drawable.btn1_highlight);
            holder.rb_b.setChecked(true);
            holder.rb_a.setChecked(false);
        } else if (thePick.equals("0")){
            holder.btnA.setBackgroundResource(R.drawable.btn2);
            holder.btnB.setBackgroundResource(R.drawable.btn2);
            holder.rb_b.setChecked(false);
            holder.rb_a.setChecked(false);
        }

final ViewHolder finalHolder1 = holder;
holder.btnB.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        finalHolder1.tvPick.setText("2");

        finalHolder1.btnA.setBackgroundResource(R.drawable.btn2);
        finalHolder1.btnB.setBackgroundResource(R.drawable.btn1_highlight);

        finalHolder1.rb_b.setChecked(true);
        finalHolder1.rb_a.setChecked(false);

        int selectedId = finalHolder1.radioPickGroup.getCheckedRadioButtonId();

        final RadioButton radioMyPick = (RadioButton) findViewById(selectedId);
        String pick_string = radioMyPick.getText().toString();

        /*Toast.makeText(getApplicationContext(),
                pick_string, Toast.LENGTH_SHORT).show();*/
    }
});

holder.btnA.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        finalHolder1.tvPick.setText("1");
        finalHolder1.btnA.setBackgroundResource(R.drawable.btn1_highlight);
        finalHolder1.btnB.setBackgroundResource(R.drawable.btn2);

        finalHolder1.rb_b.setChecked(false);
        finalHolder1.rb_a.setChecked(true);

        int selectedId = finalHolder1.radioPickGroup.getCheckedRadioButtonId();

        final RadioButton radioMyPick = (RadioButton) findViewById(selectedId);
        String pick_string = radioMyPick.getText().toString();

        /*Toast.makeText(getApplicationContext(),
                pick_string, Toast.LENGTH_SHORT).show();*/
    }
});

return v;
}


public static class ViewHolder {
    TextView tvPick;
    RadioGroup radioPickGroup;
    RadioButton rb_a, rb_b;
    Button btnA, btnB;
}
4

1 に答える 1