android onListItemClick não funciona quando os spinners são preenchidos dentro da rede

Eu estou tentando preencher um listview em que as linhas contêm uma caixa de seleção, quatro textviews e dois spinners. Os valores nas spinners em cada linha precisam ser diferentes, pois estão diretamente relacionados ao item real nessa linha. Apenas para tornar isso um pouco mais complicado, os spinners e os dois campos de texto ao lado deles não são visíveis (setVisibility (View.GONE)), a menos que a caixa de seleção esteja marcada. Eu só quero que o item da lista seja clicável (não a caixa de seleção), e os spinners precisam ser clicáveis ​​assim que forem exibidos.

Todo o meu código está funcionando corretamente, exceto que quando os spinners são preenchidos, perco a capacidade de clicar no item da lista nessa linha. Ainda posso escolher valores dos spinners nessa linha, mas tocar em qualquer outro lugar na linha não faz nada. Existem algumas linhas que não retornam dados para os spinners e elas continuam a funcionar corretamente, então acredito que tenha algo a ver com os adaptadores conectados aos spinners.

Também sei que terei que levar em conta a reciclagem de exibição de lista, mas ainda não cheguei tão longe.

Espero que alguém possa apontar o que está errado aqui antes de eu ficar completamente insano.

Aqui está o xml listview

    <ListView android:id="@+id/android:list"
      android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

<TextView android:id="@+id/android:empty"
          android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/empty"/>
</LinearLayout>

E aqui está a linha xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <CheckBox android:id="@+id/pl_selected"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="false"
            android:clickable="false"
            android:focusable="false"
            android:layout_weight="1"/>

        <TextView android:id="@+id/name"
                android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        android:layout_weight="1"
        android:focusableInTouchMode="false"
        android:clickable="false"
        android:focusable="false"/>

    <TextView android:id="@+id/name2" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:focusableInTouchMode="false"
        android:clickable="false"
        android:focusable="false"/>

</LinearLayout>

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/pl_tv1" 
            android:text="@string/pl_tv1" 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:focusableInTouchMode="false"
            android:clickable="false"
            android:focusable="false"
            android:visibility="gone"/>

    <Spinner android:id="@+id/pl_spin1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_weight="1"
            android:visibility="gone"
            android:focusableInTouchMode="false"
            android:focusable="false"/>
</LinearLayout>
<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TextView android:id="@+id/pl_tv2"
            android:text="@string/pl_tv2" 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:focusableInTouchMode="false"
            android:clickable="false"
            android:focusable="false"
            android:visibility="gone"/>

    <Spinner android:id="@+id/pl_spin2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" 
            android:layout_weight="1"
            android:visibility="gone"
            android:focusableInTouchMode="false"
            android:focusable="false"/>
</LinearLayout>
</LinearLayout>

E aqui está a atividade com a maioria das coisas irrelevantes removidas:

import android.widget.SimpleCursorAdapter;
import mdhsoft.band.Tab.DbAdapter;
import mdhsoft.band.Tab.R;
import android.os.Bundle;
import android.app.ListActivity;
import android.database.Cursor;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

public class PLActivity extends ListActivity {
    private static final int DONE_ID = Menu.FIRST;
    private DbAdapter mDbHelper;
private int mPlId;
private CheckBox mCheckBox;
private Spinner mSpin1;
private Spinner mSpin2;
private TextView mtv1;
private TextView mtv2;
private int mItemId; 
private SimpleCursorAdapter mAllItems;
private Cursor mSCursor;
private Cursor mcurSpin1;
private Cursor mcurSpin2;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pl_list);

        Bundle extras = getIntent().getExtras();
        mPlId = extras.getInt(DbAdapter.KEY_PLID);
        mDbHelper = new DbAdapter(this);
        mDbHelper.open();

        fillData();
        registerForContextMenu(getListView());
    }

private void fillData() {
    mSCursor = mDbHelper.fetchAllPl(mPlId);
    startManagingCursor(mSCursor);
    String[] from = new String[]
        {"pl_selected", DbAdapter.KEY_SNAME, DbAdapter.KEY_SNAME2};
    int[] to = new int[]{R.id.pl_selected, R.id.name, R.id.name2};
    mAllItems = new SimpleCursorAdapter(this, R.layout.pl_row, mSCursor, from, to);
    mAllItems.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
            if(columnIndex == 3) {
                    CheckBox cb = (CheckBox) view; 
                    cb.setChecked(cursor.getInt(3) > 0);
                    ViewGroup row = (ViewGroup)view.getParent();
                    if (cursor.getInt(3) > 0) {
                        mcurSpin1 = (Spinner) row.findViewById(R.id.pl_spin1);
                        mcurSpin2 = (Spinner) row.findViewById(R.id.pl_spin2);
                        mtv1 = (TextView) row.findViewById(R.id.pl_tv1);
                        mtv2 = (TextView) row.findViewById(R.id.pl_tv2);
                        mcurSpin1.setVisibility(View.VISIBLE);
                        mtv1.setVisibility(View.VISIBLE);
                        mcurSpin2.setVisibility(View.VISIBLE);
                        mtv2.setVisibility(View.VISIBLE);
                        PopulateSpinner1();
                        PopulateSpinner2(); 
                    }
                    return true;
            }
            return false;
        }
    });
    setListAdapter(mAllItems);
}

private void PopulateSpinner1(){
    mcurSpin1 = mDbHelper.fetchSByItemId(mItemId);
    startManagingCursor(mcurSpin1);
    String[] from = new String[]{DbAdapter.KEY_SNAME};
    int[] to = new int[]{android.R.id.text1};
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,                  
           android.R.layout.simple_spinner_item, mcurSpin1, from, to );
    adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
    mSpin1.setAdapter(adapter);

}

private void PopulateSpinner2(){
    mcurSpin2 = mDbHelper.fetchMByItemId(mItemId);
    startManagingCursor(mcurSpin2);
    String[] from = new String[]{DbAdapter.KEY_MNAME};
    int[] to = new int[]{android.R.id.text1};
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
          android.R.layout.simple_spinner_item, mcurSpin2, from, to );
    adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item);
    mSpin2.setAdapter(adapter);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    ViewGroup row = (ViewGroup)v;
    mSCursor.moveToPosition(position);
    mItemId = mSCursor.getInt(mSCursor.getColumnIndex(DbAdapter.KEY_SID));
    mCheckBox = (CheckBox) row.findViewById(R.id.pl_selected);
    mcurSpin1 = (Spinner) row.findViewById(R.id.pl_spin1);
mcurSpin2 = (Spinner) row.findViewById(R.id.pl_spin1);
mtv1 = (TextView) row.findViewById(R.id.pl_tv1);
mtv2 = (TextView) row.findViewById(R.id.pl_tv2);
    if (mCheckBox.isChecked()) {
        mCheckBox.setChecked(false);
        mcurSpin1.setVisibility(View.GONE);
        mtv1.setVisibility(View.GONE);
        mcurSpin2.setVisibility(View.GONE);
        mtv2.setVisibility(View.GONE);
}
    else {
        mCheckBox.setChecked(true);
        mcurSpin1.setVisibility(View.VISIBLE);
        mtv1.setVisibility(View.VISIBLE);
        mcurSpin2.setVisibility(View.VISIBLE);
        PopulateSpinner1();
        PopulateSpinner2(); 

    }
  }

}

Agradecemos antecipadamente por qualquer ajuda que você possa dar.

questionAnswers(1)

yourAnswerToTheQuestion