有Listview时保存我的RadioGroup的状态

时间:2017-07-03 14:44:02

标签: java android listview android-fragments

我在使用RadioGroup实现listview时遇到了一些问题。 当我选择我的RadioGroup的一些CheckButton并在滚动listview后,我的ChechButton未经检查。我试图解决它,但我不知道该怎么做。 我知道我需要保存我的checkbutton的状态并在创建listview时加载它。但我不知道该怎么做。

有人可以帮我处理我的代码吗?

这里有XML:

var a = [510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 402, 402, 510, 510, 510, 510, 64, 510, 73, 510, 510, 510, 73, 510, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 64, 73, 73, 73, 73, 73, 73, 73, 64, 73, 73, 73, 73, 73, 64, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73];
    
    //create array of only unique integers first
    var unique = a.filter(function(item, i, ar){ return ar.indexOf(item) === i; });
    
    console.log(unique);
    
    //conver array of integers to array of object where value represents the frequency of element
    var objUnique=unique.map(function(num){
    	var strNum = String(num);
      //initialize object
    	var emptyObj={[strNum]:0};
    	a.forEach(function(oldNum){
      	if(num===oldNum){
        	//increment the count for every match
        	emptyObj[strNum]=emptyObj[strNum]+1;
        }
      });
      return emptyObj;
    });
    
    console.log(objUnique);
    
    //initialize the final result array
    var resultArray = [];
    
    //iterate over array of objects 
    objUnique.forEach(function(obj){
    	//get array of values(count) and pick 1st element [0]
    	console.log(Object.values(obj)[0]);
      for(var i=0; i<Object.values(obj)[0]; i++){
      	//same logic as above, but for keys
      	var num = Number(Object.keys(obj)[0]);
        resultArray.push(num);
      }
    });
    
    //the result for comparison
    console.log("Fınal Result",resultArray);

在这里,我们有了apater:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="8dp"
android:id="@+id/teste"
android:background="@drawable/borderframe"
tools:context="com.example.gerdaumanagement.gerdaumanagement.layoutListaAMC">



    <TextView
        android:id="@+id/potencial"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:paddingRight="3dp"
        android:paddingTop="3dp"
        android:text="Potencial"
        android:textAllCaps="true"
        android:textSize="15sp" />

    <TextView
        android:id="@+id/potencialLetra"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="25dp"
        android:text="A"
        android:textAllCaps="true"
        android:textColor="@color/azulgerdau"
        android:textSize="40sp"
        android:layout_below="@+id/potencial"
        android:layout_alignParentStart="true"
        android:layout_toStartOf="@+id/questao" />

    <TextView
        android:id="@+id/questao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/potencial"
        android:text="As máquinas e equipamentos possuem selo de liberação por um líder Gerdau e está dentro do prazo de validade?"
        android:textAlignment="center"
        android:textSize="16sp" />

<TextView
    android:id="@+id/titulo"
    android:textAlignment="center"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Condiçao Fisica"
    android:textSize="15sp"
    android:gravity="center"
    android:layout_toStartOf="@+id/questao"
    android:layout_below="@+id/potencialLetra" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/questao"
        android:layout_alignParentEnd="true"
        android:gravity="center_horizontal"
        android:paddingTop="5dp"
        android:layout_alignStart="@+id/questao">

    <RadioGroup
        android:id="@+id/radioGroupAmc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <RadioButton
        android:id="@+id/sim"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sim"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

        <RadioButton
            android:id="@+id/nao"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/questao"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_toEndOf="@+id/sim"
            android:text="Não" />

        <RadioButton
        android:id="@+id/na"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="NA"
        android:layout_below="@+id/questao"
        android:layout_toEndOf="@+id/nao"
        />
        </RadioGroup>
    </LinearLayout>



</RelativeLayout>

这里我有我的List whith数据:

class AdapterAmcPersonalizada extends BaseAdapter {

    private final List<AvaliacaoMensal> mensal;
    private final Activity act;


    public AdapterAmcPersonalizada(List<AvaliacaoMensal> mensal, Activity act) {
        this.mensal = mensal;
        this.act = act;

    }

    @Override
    public int getCount() {
        return mensal.size();
    }

    @Override
    public Object getItem(int position) {
        return mensal.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = act.getLayoutInflater().inflate(R.layout.activity_layout_lista_amc, parent, false);
        AvaliacaoMensal mensalAmc = mensal.get(position);



        //pegando as referências das Views
        TextView potencial = (TextView) view.findViewById(R.id.potencialLetra);
        TextView questao = (TextView) view.findViewById(R.id.questao);
        TextView titulo = (TextView) view.findViewById(R.id.titulo);

        //populando as Views
        potencial.setText(String.valueOf(mensalAmc.getPotencial()));
        questao.setText(String.valueOf(mensalAmc.getQuestao()));
        titulo.setText(String.valueOf(mensalAmc.getTitulo()));


       RadioGroup radioGroupAmc = (RadioGroup) view.findViewById(R.id.radioGroupAmc);
       radioGroupAmc.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {


                switch(checkedId) {
                    case R.id.sim:

                            // trata radioValor1
                            break;
                    case R.id.nao:

                            // trata radioValor2
                            break;
                    case R.id.na:

                        // trata radioValor3
                        break;
                }

            }
        });



        return view;
    }



}

在这里,我有我的班级AvaliacaoMensal:

 public List<AvaliacaoMensal> todosMensal() {
        List<AvaliacaoMensal> dados = new ArrayList<AvaliacaoMensal>();
        dados.add(new AvaliacaoMensal("As máquinas e equipamentos possuem selo de liberação por um líder Gerdau e está dentro do prazo de validade?", 'A', "Condição Fisica", false, false,false));
        dados.add(new AvaliacaoMensal("Atividades se encontram sinalizadas ou isoladas?", 'B' , "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Todos os colaboradores estão usando os EPI´s básicos, específicos e em boas condições? Os EPI's são adequados aos riscos das atividades? Quando aplicável são realizados pré-uso dos mesmos?", 'B', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("As plataformas, andaimes, enlonadores, estruturas de guarda corpo e corrimão se encontram em boas condições?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Máquinas e equipamentos que possuem partes rotativas estão adequadas conforme NR 12?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Existe local adequado para refeição e sanitários suficientes conforme NR 31?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("A contratada faz o uso de bloqueio de energia quando aplicavel?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Todas as maquinas devem possuir proteção contra tombamento e cinto de segurança", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("A frente de trabalho possui caixa de primeiros socorros?", 'C', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Está sendo cumprida a proibição de utilizar adornos como: brincos, pulseiras, relógios, cordões, anéis, etc?", 'C', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("As proteções contra quedas, seja para acesso ou execução das tarefas, estão instaladas e usadas  de acordo c/ os procedimentos de segurança e conforme projeto elaborado por profissional habilitado ?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Os veículos operacionais e transporte de pessoas passaram pela vistoria mensal?", 'A', "Condição Fisica",false, false,false));
        dados.add(new AvaliacaoMensal("Todas atividades realizadas possuem padrão, IO ou APR?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("A APR é de conhecimento, está assinada por todos os executantes da tarefa e disponível na frente de serviço?  Toda liderança da contratada foi treinada nos padrões de APR e PT?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("As IPU's estão sendo preenchidas corretamente para máquinas, equipamentos, veículos e ferramentas manuais?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Colaboradores que executam atividades críticas estão portando crachá de autorização para Riscos Críticos?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Operadores e motoristas estão portanto CNH?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("A empresa tem uma média de 2 relatos por colaborador?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("A empresa está emitindo RTR?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Os relatos estão sendo tratados em DDS?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("A empresa está dando fedback dos relatos e RTR para colaboradores?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Está sendo realizado aferição de pressão arterial para colaboradores que realizam atividades críticas?", 'C', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Possui alguma ação em atraso de acidente?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Regras Gerais e específicas estão sendo cumpridas?", 'B', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("Possui novos colaborares na area? Se sim, possuem padrinhos treinando em ordem de serviço, IO, padrão e etc?", 'A', "Sistema",false, false,false));
        dados.add(new AvaliacaoMensal("A contratada deve possuir a coleta seletiva implantada e recipientes identificados à disposição dos colaboradores", 'B', "Meio Ambiente",false, false,false));
        dados.add(new AvaliacaoMensal("A coleta seletiva deve ser utilizada corretamente, com a destinação correta nos recipientes", 'C', "Meio Ambiente",false, false,false));
        dados.add(new AvaliacaoMensal("As embalagens de produtos quimicos / agrotóxicos devem ser devidamente armazenadas e devolvidas ao fabricante", 'A', "Meio Ambiente",false, false,false));
        dados.add(new AvaliacaoMensal("A contratada destina corretamente o óleo lubrificante usado e toma medidas adicionais durante o abastecimento de maquinas / motosserra", 'B', "Meio Ambiente",false, false,false));
        dados.add(new AvaliacaoMensal("As instalações devem ser localizadas com geografia favorável para obtenção de água, fora das APP (áreas de preservação permanente), com distância mínima a 100 metros dos rios e das nascentes d’água.", 'A', "Meio Ambiente",false, false,false));
        dados.add(new AvaliacaoMensal("Os produtos Químicos e Combustiveis estão armazenados de forma correta?", 'B', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("Deve ter FISQP de todos os produtos armazenados, com atendimento as remendações e regras de armazenamento.", 'B', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("Os locais de armazenamento possuem placas de acesso restrito e cadeado?", 'B', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("As embalagens vazias de combustíveis ou lubrificantes devem permanecer neste local até ser retiradas da fazenda.", 'B', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("Os produtos quimicos e inflamaveis são acima de 37°? Se não, existe autorização da area de SSMA da unidade?", 'A', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("O deposito de produtos químicos posuem sinalização e proteção contra incêndios?", 'A', "Produto Quimíco e  Combustiveis",false, false,false));
        dados.add(new AvaliacaoMensal("Os serviços com produtos químicos e inflamáveis, possui a APR e Permissão de Trabalho? ", 'A', "Produto Quimíco e  Combustiveis",false, false,false));

        // Continuação do código
        return dados;
    }

2 个答案:

答案 0 :(得分:0)

getView方法中,您应该在这种情况下设置RadioGroup,radioGroupAmc的状态。 onCheckedChanged你应该记得你在getView中稍后恢复它的选择。在您的情况下,方便将此信息存储在List<AvaliacaoMensal> mensal

答案 1 :(得分:0)

您应该将广播组值存储到AvaliacaoMensal对象中。否则,每当用户滚动由另一个未经检查的视图值填充的视图无线电按钮时。

public class AvaliacaoMensal{
     boolean[] radioButtonValues = new boolean[3];
    ....
}

<强> UNTESTED!

 class AdapterAmcPersonalizada extends BaseAdapter {
        private AvailacaoMensal flag;
        private final List<AvaliacaoMensal> mensal;
        private final Activity act;


        public AdapterAmcPersonalizada(List<AvaliacaoMensal> mensal, Activity act) {
            this.mensal = mensal;
            this.act = act;

        }

        @Override
        public int getCount() {
            return mensal.size();
        }

        @Override
        public Object getItem(int position) {
            return mensal.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = act.getLayoutInflater().inflate(R.layout.activity_layout_lista_amc, parent, false);
            AvaliacaoMensal mensalAmc = mensal.get(position);



            //pegando as referências das Views
            TextView potencial = (TextView) view.findViewById(R.id.potencialLetra);
            TextView questao = (TextView) view.findViewById(R.id.questao);
            TextView titulo = (TextView) view.findViewById(R.id.titulo);

            //populando as Views
            potencial.setText(String.valueOf(mensalAmc.getPotencial()));
            questao.setText(String.valueOf(mensalAmc.getQuestao()));
            titulo.setText(String.valueOf(mensalAmc.getTitulo()));


           RadioGroup radioGroupAmc = (RadioGroup) view.findViewById(R.id.radioGroupAmc);

           flag = mensalAmc;
           radioGroupAmc.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {


                    switch(checkedId) {

                        case R.id.sim:
                                flag.radioButtonValues[0] = group.isChecked();
                                // trata radioValor1
                                break;
                        case R.id.nao:

                                // trata radioValor2
                                break;
                        case R.id.na:

                            // trata radioValor3
                            break;
                    }

                }
            });



            return view;
        }



    }

在适配器内创建一个标志,以选择当前的Object。因为如果你访问onCheckedListener内的位置,那么位置必须是最终的。