我在使用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;
}
答案 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
内的位置,那么位置必须是最终的。