【问题标题】:Method for Spinner item click listener with SimpleCursorAdapter and ViewBinder使用 SimpleCursorAdapter 和 ViewBinder 的 Spinner 项目单击侦听器的方法
【发布时间】:2011-12-23 05:52:15
【问题描述】:

我有一个Spinner 元素,我使用SimpleCursorAdapter 填充来自Cursor 的数据。我还使用setViewBinder 来自定义Spinner 的行布局。一切正常,Spinner 获取数据,Spinner 项目使用自定义布局。

但是从Spinner 下拉视图中单击项目没有任何作用。它不会将所选项目设置为选中,也不会关闭下拉视图。我不知道我必须做什么,以便将列表中的选定项目传递给Spinner 逻辑并按应有的方式运行。这是我正在使用的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:baselineAligned="false"
    android:clickable="true"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher" />


    <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        android:layout_weight="1"
        android:textColor="#424242"
        android:gravity="center_vertical"
        android:text="Textfield" />

</LinearLayout>
</LinearLayout>

这是ViewBinder

static final ViewBinder VIEW_BINDER = new ViewBinder(){
    public boolean setViewValue(View view, Cursor cursor, int columnIndex){

        if (view.getId() == R.id.text){

            String local = view.getResources().getString(cursor.getInt(columnIndex));
            ((TextView) view).setText( local );

            return true;
        }
        if (view.getId() == R.id.icon){

            int icon = cursor.getInt(columnIndex);
            ((ImageView) view).setImageResource(icon);

            return true;
        }

        return false;
    }
};

这是我将数据添加到Spinner 的方法:

private Spinner spinner;
private DBHandler dbhandler;
private SimpleCursorAdapter adapter;
private final String[] from = new String[]{dbhandler.LIB_LOCAL, dbhandler.LIB_ICON};
private final int[] to = { R.id.text, R.id.icon };  
@Override
protected void onResume(){
    super.onResume();

    Cursor cursor = dbhandler.getLibEntries();


    adapter = new SimpleCursorAdapter(this, R.layout.spinner_row, cursor, from, to);
    adapter.setViewBinder(VIEW_BINDER);
    spinner.setAdapter(adapter);
}

添加一个OnItemSelectedListener,就像在这篇文章中建议的那样,实现如下,但不能解决问题。此外,我不确定setOnItemSelectedListener 如何帮助我获得稍后需要的数据字段:

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }

        });

【问题讨论】:

    标签: android android-layout spinner android-viewbinder


    【解决方案1】:

    你应该做的是实现一个OnItemSelectedListener。 In the listener, when ever an item is selected save that item to some sort of variable you can access after the spinner is closed.

    【讨论】:

    • 好吧,它不是自定义微调器,它只是为其项目使用自定义视图。当使用标准微调器时,无论是否设置了侦听器,都会实现选择。我不希望执行任何特殊活动,但只有当我调用 getSelectedItem() 时我能够选择一个项目并且下拉菜单关闭并返回所选项目。我有必要为此使用自己的听众吗? + 如果是这样,我该怎么称呼下拉菜单关闭并选择项目?
    • 好吧,我设置了一个 OnItemSelectedListener。但这不是问题。问题是 --> 它不可能
    • 噢噢噢噢噢噢。我现在知道了。这是一个奇怪的问题。
    【解决方案2】:

    我们开始:

    需要设置adapter.setDropDownViewResource(R.layout.spinner_row); DropDownView 定义了 DropDownView 的外观,SimpleCursorAdapter 构造函数中定义的布局定义了(关闭的)微调器对象本身的项目布局(不是它的下拉视图!)。

    所以,很高兴为 DropDownView 提供不同的布局,这与 SimpleCursorAdapter 中定义的布局完全一样,因此推送给它的值可以设置为正确的相应字段,不同之处在于我使用android:layout_height="?android:attr/listPreferredItemHeight" dropdownview 布局的 textview 和 spinner 布局的 textview 的 android:layout_height="wrap_content"!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多