当填充内listrow纺纱机器人onListItemClick不工作 [英] android onListItemClick not working when spinners populated within listrow

查看:108
本文介绍了当填充内listrow纺纱机器人onListItemClick不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想填充列表视图中的行包含一个复选框,四textviews,和两个微调。在每一行上的微调器的值需要是不同的,因为它们直接关系到该行实际的项目。只是为了让更多的稍微复杂一点的纺织和他们旁边的两个文本字段不可见(setVisibility(View.GONE)),除非该复选框被选中。我只是想列表项的点击能(而不是复选框),以及纺纱必须点击就能一旦被显示。

I am trying to populate a listview in which the rows contain a checkbox, four textviews, and two spinners. The values in the spinners on each row need to be different as they directly relate to the actual item on that row. Just to make it that little bit more complicated the spinners and the two text fields beside them are not visible (setVisibility(View.GONE)) unless the checkbox is checked. I just want the list item click-able (not the checkbox), and the spinners need to be click-able once they are shown.

我所有的code正常工作,只是微调填充时,然后我失去点击该行的列表项的能力。我仍然可以从该行的微调选择值,但触及其他地方的行做什么都没有。有迹象表明,不将数据返回到纺纱一些行和他们继续,所以我相信这是值得做的与连接到纺纱适配器正常运行。

All of my code is working correctly except that when the spinners are populated then I lose the ability to click the list item on that row. I can still choose values from the spinners on that row but touching anywhere else on the row does nothing at all. There are some rows that don't return data to the spinners and they continue to operate correctly so I believe it is something to do with the adaptors connected to the spinners.

此外,我知道我将不得不考虑列表视图回收,但我没有得到那么远呢。

Also I know I will have to account for the list view recycling but I haven't got that far yet.

我希望有人能指出我走之前完全疯了什么是错在这里。

I hope someone can point out what is wrong here before I go completely insane.

下面是列表视图XML          

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>

下面是该行的XML     

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>

在这里,与大多数中无关的东西,活动取出来:

And here is the activity with most of the irrelevant stuff taken out:

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

    }
  }

}

在此先感谢您的帮助,你可以给。

Thanks in advance for any help you can give.

推荐答案

您可以尝试添加安卓descendantFocussability = blocksDescendants 到最高的线性布局。这可能是有益的。

You can try adding android:descendantFocussability=blocksDescendants to the top most linear layout. This might be helpful.

这篇关于当填充内listrow纺纱机器人onListItemClick不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆