Android onListItemClick не работает, когда счетчики заполнены в списке

Я пытаюсь заполнить представление списка, в котором строки содержат флажок, четыре просмотра текста и два счетчика. Значения в счетчиках в каждой строке должны быть разными, поскольку они напрямую связаны с фактическим элементом в этой строке. Просто чтобы сделать это немного более сложным, счетчики и два текстовых поля рядом с ними не видны (setVisibility (View.GONE)), если не установлен флажок. Я просто хочу, чтобы элемент списка был активен по щелчку (а не флажок), а счетчики должны быть доступны по щелчку, как только они будут показаны.

Весь мой код работает правильно, за исключением того, что, когда счетчики заполнены, я теряю возможность щелкнуть элемент списка в этой строке. Я все еще могу выбирать значения из счетчиков в этом ряду, но касание в любом месте строки ничего не делает. Есть ряды, которые не возвращают данные в счетчики, и они продолжают работать правильно, поэтому я считаю, что это как-то связано с адаптерами, подключенными к счетчикам.

Кроме того, я знаю, что мне придется учитывать переработку представления списка, но я еще не дошел до этого.

Я надеюсь, что кто-то может указать, что здесь не так, прежде чем я сойду с ума.

Here is the listview xml

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

And here is the row 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>

А вот действия с большинством ненужных вещей:

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(); 

    }
  }

}

Заранее спасибо за любую помощь, которую вы можете оказать.

Ответы на вопрос(1)

Ваш ответ на вопрос