Hi Forum,
ich habe mir einen Adapter geschrieben damit ich in eine ListView abwechselnd einen String und eine RadioButtonGroup einfügen kann. Soweit funzt das auch.
Leider wenn meine ListView zu groß wird und ich zu scrollen anfange (was erwünscht ist), duplizieren sich die Einträge.
Durch den Debugger habe ich erkannt, das der Adapter immer dann wenn die View weiter scrollt, wieder aufgerufen wird und das ist etwas unschön.
Zuerst hab ich versucht es mit einem "ViewHolder" zu lösen, indem ich das ganze mit view.setTag(holder) speichere und dann wieder hole. Leider stand im Tag nur der String und nie die RadioButtonGroup d.h. ich hab zwar meine Strings angezeigt bekommen aber meine Auswahlmöglichkeiten waren weg. ;(
Google hat mir verraten das man auch eien ViewBinder schreiben kann aber da steh ich völlig auf dem Schlauch, da ich nicht verstehe wie bzw. wann der Adapter die getViewValue() aufruft.
Der Code:
Frage:
Hat jemand eine Idee wie ich die öfteren Aufrufe dazu bringe mir die Werte die ich ihm am Anfang übergebe zu behalten, ohne mir die Reihenfolge durcheinander zu bringen, noch die Einträge zu duplizieren? ???:L
Grüße
thaFlasher
ich habe mir einen Adapter geschrieben damit ich in eine ListView abwechselnd einen String und eine RadioButtonGroup einfügen kann. Soweit funzt das auch.
Leider wenn meine ListView zu groß wird und ich zu scrollen anfange (was erwünscht ist), duplizieren sich die Einträge.
Durch den Debugger habe ich erkannt, das der Adapter immer dann wenn die View weiter scrollt, wieder aufgerufen wird und das ist etwas unschön.
Zuerst hab ich versucht es mit einem "ViewHolder" zu lösen, indem ich das ganze mit view.setTag(holder) speichere und dann wieder hole. Leider stand im Tag nur der String und nie die RadioButtonGroup d.h. ich hab zwar meine Strings angezeigt bekommen aber meine Auswahlmöglichkeiten waren weg. ;(
Google hat mir verraten das man auch eien ViewBinder schreiben kann aber da steh ich völlig auf dem Schlauch, da ich nicht verstehe wie bzw. wann der Adapter die getViewValue() aufruft.
Der Code:
Java:
package tsystem.adapter;
import java.util.ArrayList;
import tsystem.activity.R;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class RadiogroupAdapter extends ArrayAdapter<Object> {
RadioGroup mRadioGroup;
TextView re;
Context context;
String TAG = "RGA";
private ArrayList<Object> items;
public RadiogroupAdapter(Context context, int textViewResourceId, ArrayList<Object> items) {
super(context, textViewResourceId, items);
this.context = context;
this.items = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null || v.getTag()==null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_items, null);
Object o = items.get(position);
if (o != null) {
if(o instanceof String){
re=((TextView)v.findViewById(R.id.listtv));
re.setText((CharSequence) o);
re.setPadding(10, 10, 10, 10);
}
else if(o instanceof String[]){
mRadioGroup = (RadioGroup)v.findViewById(R.id.radiobuttons);
mRadioGroup.setPadding(15, 10, 15, 10);
createRadioButtons((String[]) o);
}
}
}
else{
}
return v;
}
private void createRadioButtons(String[] rating) {
LinearLayout.LayoutParams lp = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.WRAP_CONTENT, RadioGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(10, 10, 10, 10);
for (int j = rating.length-1; j >= 0; j--) {
RadioButton rb = new RadioButton(context);
rb.setTextColor(Color.BLACK);
rb.setTextSize(25.0f);
rb.setText(rating[j]);
rb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
RadioButton bb = (RadioButton)v;
bb.setSelected(true);
}
});
mRadioGroup.addView(rb,0,lp);
}
}
}
Frage:
Hat jemand eine Idee wie ich die öfteren Aufrufe dazu bringe mir die Werte die ich ihm am Anfang übergebe zu behalten, ohne mir die Reihenfolge durcheinander zu bringen, noch die Einträge zu duplizieren? ???:L
Grüße
thaFlasher