Пользовательская прокрутка адаптера не сохраняет состояние групповой кнопки Listview в Android (Статус не сохраняется при прокрутке вниз.) - PullRequest
0 голосов
/ 28 мая 2018

Состояние не сохраняется при прокрутке вниз.

public class OnooltActivity2 extends AppCompatActivity implements View.OnClickListener {

    ListView simpleList;
    String[] questions;
     ArrayList<String> array = new ArrayList<String>();
     ArrayList<String> onoolts = new ArrayList<String>();
    ArrayList<String> passArray = new ArrayList<String>();
    FirebaseDatabase database;

    CustomAdapter customAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.onoolt_activity_2);
        simpleList = (ListView) findViewById(R.id.simpleListView);
        Parcelable state = simpleList.onSaveInstanceState();
        submit = (Button) findViewById(R.id.submit);
        customAdapter = new CustomAdapter(getApplicationContext(), questions, array);
        simpleList.setAdapter(customAdapter);
        getDavaa();// this get data. In function array.add(onoolt.getBaruunTal()); customAdapter.notifyDataSetChanged();
        simpleList.onRestoreInstanceState(state);
..........

Пользовательский

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.HashMap;


public class CustomAdapter extends BaseAdapter {
    Context context;
    String[] questionsList;
    LayoutInflater inflter;
    public static ArrayList<String> selectedAnswers;

    public CustomAdapter(Context applicationContext, String[] questionsList,  ArrayList<String> array) {
        this.context = context;
        this.questionsList = questionsList;

        selectedAnswers = new ArrayList<>();
        for (int i = 0; i < questionsList.length; i++) {
            selectedAnswers.add(array.get(i));
        }
        inflter = (LayoutInflater.from(applicationContext));

    }

    @Override
    public int getCount() {
        return questionsList.length;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        view = inflter.inflate(R.layout.radio_group_item, null);
        TextView question = (TextView) view.findViewById(R.id.question);
        RadioButton yes = (RadioButton) view.findViewById(R.id.yes);
        RadioButton no = (RadioButton) view.findViewById(R.id.no);
        yes.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (isChecked)
                    selectedAnswers.set(i, "Yes");
            }
        });
        no.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked)
                    selectedAnswers.set(i, "No");

            }
        });
       // yes.setText("  ");
      //  no.setText("  ");
        question.setText(questionsList[i]);
        return view;
    }
}

Основная проблема: Основная проблема: Основная проблема: Основная проблема: Основная проблема: Основная проблема: Состояние не сохраняется при прокрутке вниз.Помоги мне.Сначала я проверил список каждого элемента.Затем я скатываюсь вниз.Затем прокрутите вверх.Но не выбрал.Эта ошибка изображения -> enter image description here

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы не устанавливаете состояние каждого ответа.Установите RadioButton состояние (выбрано / не выбрано) в методе getView.

@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
    view = inflter.inflate(R.layout.radio_group_item, null);
    TextView question = (TextView) view.findViewById(R.id.question);
    RadioButton yes = (RadioButton) view.findViewById(R.id.yes);
    RadioButton no = (RadioButton) view.findViewById(R.id.no);

    // setting previous sate
    yes.setSelected(false);
    no.setSelected(true);
    if(selectedAnswers.get(i).equals("Yes")){
       yes.setSelected(true);
    }else if(selectedAnswers.get(i).equals("No")){
       no.setSelected(true);
    }

    yes.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            if (isChecked)
                selectedAnswers.set(i, "Yes");
        }
    });
    no.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked)
                selectedAnswers.set(i, "No");

        }
    });
   // yes.setText("  ");
  //  no.setText("  ");
    question.setText(questionsList[i]);
    return view;
}
0 голосов
/ 28 мая 2018

Вам нужно будет установить состояние составной кнопки внутри getView (), чтобы в восстановленном виде получить индекс состояния в следующем виде:

yes.setChecked(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...