Cześć ;-)
Dawno nie było mnie tutaj na forum, ale dzisiaj postanowiłem poradzić się na forum, bo nie mam pojęcia nawet pod jakim hasłem szukać odpowiedzi na moje pytanie. Byćmoże ktoś już kiedyś miał podobny problem.
Tworzę program, w którym będzie wykorzystywany formularz. Utworzyłem narzędzie do tego potrzebne, ale problem jest następujący. Adapter w ListView tworzy element od nowa gdy tylko zniknie z ekranu i pojawi się ponownie. Co oznacza, że gdy zadam pytanie "Jakiej jesteś płci?" i będą odpowiedzi "Kobieta/Mężczyzna" jako RadioButtony po zaznaczeniu i zjechaniu do następnego pytania odpowiedź z poprzedniego pytania już znikła.
Myślałem, żeby utworzyć jakiegoś Bundle'a który trzymałby odpowiedzi i podczas tworzenia elementu w adapterze przywracałby poprzedni stan.
Miał ktoś podobny problem albo ma ktoś jakiś lepszy pomysł?
Tutaj zapodaję kod mojego adaptera:
import java.util.ArrayList;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import com.formcreator.model.database.Answer;
import com.formcreator.model.database.Question;
public class Questions extends BaseAdapter {
private Context context;
private ArrayList<Question> data;
private Question currentQuestion;
public Questions( Context context, ArrayList<Question> data ) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int idx) {
return data.get( idx );
}
@Override
public long getItemId(int idx) {
return data.get( idx ).id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
currentQuestion = this.data.get( position );
LinearLayout layout = newLinearLayout();
TextView question = newTextView();
question.setText( currentQuestion.text );
layout.addView( question );
LinearLayout answers = newLinearLayout();
putAnswersToQuestion( answers, currentQuestion );
layout.addView( answers );
if( currentQuestion.isOther == 1 ) {
EditText other = newOtherAnswer();
layout.addView( other );
}
return layout;
}
private TextView newTextView( ) {
return new TextView(context);
}
private LinearLayout newLinearLayout( ) {
LinearLayout result = new LinearLayout(context);
result.setOrientation( LinearLayout.VERTICAL );
return result;
}
private void putAnswersToQuestion( LinearLayout answers, Question currentQuestion ) {
if( currentQuestion.type == QuestionType.SINGLE_ANSWER ) {
putRadioAnswersTo( answers );
} else if( currentQuestion.type == QuestionType.MULTIPLE_ANSWERS ) {
putCheckBoxAnswersTo( answers );
} else if( currentQuestion.type == QuestionType.OPEN_ASWER ) {
EditText answer = new EditText( this.context );
answers.addView( answer );
}
}
private void putRadioAnswersTo( LinearLayout answers ) {
RadioGroup group = new RadioGroup( this.context );
for( Answer answer : currentQuestion.answers ) {
RadioButton button = new RadioButton( this.context );
button.setText( answer.text );
group.addView( button );
}
answers.addView( group );
}
private void putCheckBoxAnswersTo( LinearLayout answers ) {
for( Answer answer : currentQuestion.answers ) {
CheckBox button = new CheckBox( this.context );
button.setText( answer.text );
answers.addView( button );
}
}
private EditText newOtherAnswer( ) {
EditText result = new EditText( this.context );
result.setHint( "Inne:" );
return result;
}
}