2017-07-03 49 views
0

我在使用RadioGroup實現列表視圖時遇到了一些問題。 當我選擇我的RadioGroup一些CheckButton,並在我滾動列表視圖後,我的ChechButton未選中。我試圖修復它,但我不知道該怎麼做。 我知道我需要保存我的checkbutton的狀態,並在創建listview時加載它。但我不知道該怎麼做。當我有一個列表視圖時保存我的RadioGroup的狀態

有人可以幫我用我的代碼嗎?

這裏有XML:

<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> 

在這裏,我們有apater:

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; 
    } 



} 

在這裏,我有我的名單蒙山數據:

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; 
    } 

,在這裏我有我的AvaliacaoMensal:

class AvaliacaoMensal { 
    private String questao; 
    private char potencial; 
    private String titulo; 
    private boolean sim, nao, na; 

回答

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; 
     } 



    } 

創建一個標誌轉接器內選擇這是當前對象。因爲如果您訪問onCheckedListener內的位置,頭寸需要是最終的。

+0

感謝您的回答,但我無法在我的'AvaliacaoMensal'中添加'boolean [] radioButtonValues = new boolean [3];'因爲如果我這樣做了,我需要更改我的列出數據。我把這些放到我的問題中。 –

+0

我不明白爲什麼你不能添加這個,但是你可以在baseadapter中創建另一個與你的對象大小相同的數組列表,並將你的單選按鈕值存儲到它中。但這是一個不好的做法,可能會發生一些問題 –

+0

isChecked它不起作用。說不能解決方法isChecked。 –

0

你在裏面getView方法你應該設置你的RadioGroup,radioGroupAmc在這種情況下的狀態。並且onCheckedChanged你應該記住你的選擇以便在getView以後恢復它。在你方便的情況下,將這些信息存儲在List<AvaliacaoMensal> mensal

+0

你能給我一些代碼示例嗎? –

+0

@ cricket_007你爲什麼編輯我的答案? – anber

+0

因爲不是所有人都用英文代碼 –