Eu estou usando um CheckBox no item de linha do meu ListView. É definido o CheckBox para android:focusable="false"
. Portanto, o OnItemClickListener para o ListView funciona corretamente, mas a caixa de seleção parece estar desmarcada. Como posso resolver isso?
no meu arrayAdapter personalizado:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
FileHolder holder;
if(v == null){
LayoutInflater inflater = ((Activity)getContext()).getLayoutInflater();
v = inflater.inflate(layoutResourceId, parent, false);
holder = new FileHolder();
holder.isChecked = (CheckBox)v.findViewById(R.id.checkBox1);
v.setTag(holder);
holder.isChecked.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Log.d("common", "checked");
}
});
}
}
em row_item.xml:
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:button="@drawable/checkbox"
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="true"/>
EDITAR: Eu tentei registrar um OnTouchListener, mas onTouch () também não foi chamado.
Respostas:
1 para resposta № 1Eu não acho que você deve definir focusable e focusableInTouchMode para false. Tente definir o pai como nulo quando você inflar o layout
v = inflater.inflate(layoutResourceId, null, false);
Espero que ajude.
Também acho que, se a sua lista for longa, você terá um problema de desempenho. Desencoraja criar new OnClickListener(){}
em getView(int position, View convertView, ViewGroup parent) {}
se você listar tem muita fila. Crie na instância do ouvinte, defina-o para todas as linhas. Você pode usar a tag para determinar qual visualização é clicada.