【问题标题】:Spinner onItemSelected doesn't work when i use setAdapter()当我使用 setAdapter() 时,微调器 onItemSelected 不起作用
【发布时间】:2012-09-14 04:42:40
【问题描述】:

我有 1 个名为 spinner1 的微调器。可见性设置为不可见。然后我使用图像按钮执行单击以启动微调器。 当我从 strings.xml 提供数组数据时。它调用 onItemSelected。 (静态数组) 但是当我使用 arrayadapter 到微调器的 setadapter 时。它不会触发 onItemSelected 事件。

让我给你看一些代码。

final Spinner catlist = (Spinner) findViewById(R.id.spinner1);

ArrayAdapter<String> spnadp = new ArrayAdapter<String>(getApplicationContext(), R.layout.style1,android.R.id.text1,phone_numbers);

catlist.setAdapter(spnadp);
catlist.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
            Toast.makeText(getApplicationContext(), "bbname came is ", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {        
    }
});

而 phone_numbers 是一个 ArrayList。

ImageButton bt1 = (ImageButton) findViewById(R.id.imageButton1);
bt1.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
           catlist.performClick();
    }
});

这就是我所说的。

所以我的问题是设置适配器有什么问题。 如果我不设置它工作正常。它触发 Onitemselected()。而在其他情况下则不会。

已编辑: (style1.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@android:id/text1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:paddingLeft="6dip"
        android:textColor="@color/maroon"
        android:textStyle="bold"
        android:textSize="8pt"
        android:paddingRight="10dip"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

@Hiral 申请强制关闭,我得到了这个......

09-13 14:55:29.319: E/AndroidRuntime(8380): FATAL EXCEPTION: main
09-13 14:55:29.319: E/AndroidRuntime(8380): java.lang.NullPointerException
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:353)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.AbsListView.obtainView(AbsListView.java:1495)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.ListView.onMeasure(ListView.java:1127)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.View.measure(View.java:8335)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.View.measure(View.java:8335)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:386)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.View.measure(View.java:8335)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.View.measure(View.java:8335)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.View.measure(View.java:8335)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewRoot.performTraversals(ViewRoot.java:843)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1892)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.os.Looper.loop(Looper.java:130)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at android.app.ActivityThread.main(ActivityThread.java:3835)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at java.lang.reflect.Method.invokeNative(Native Method)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at java.lang.reflect.Method.invoke(Method.java:507)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
09-13 14:55:29.319: E/AndroidRuntime(8380):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: android spinner


    【解决方案1】:

    我认为,仅仅因为你的这行代码,你没有得到它:

    ArrayAdapter<String> spnadp = new ArrayAdapter<String>(getApplicationContext(), R.layout.style1,android.R.id.text1,phone_numbers);
    

    这里你的第二个参数是你的布局文件。但是,你的第三个参数应该是你布局文件中 textview 的 id,你在第二个参数中指定。错误地你在 R.id 之前添加了 android。文本1。它将查看您指定的 id 的 android 默认布局并且不会得到那个。

    所以尝试将这一行更改为:

    (对于默认布局):

    ArrayAdapter<String> spnadp = new ArrayAdapter<String>(getApplicationContext(), android.R.id.simple_spinner_item,phone_numbers);
    

    试试看!

    更多参考:

    Refer this

    编辑:

    ArrayAdapter<String> spnadp = new ArrayAdapter<String>(getApplicationContext(),R.layout.style1,phone_numbers);
    

    让你的 style1.xml 像:

    <?xml version="1.0" encoding="utf-8"?>
    <TextView
            xmlns:android="http://schemas.android.com/apk/res/android"        
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:minHeight="?android:attr/listPreferredItemHeight"
            android:paddingLeft="6dip"
            android:textColor="@color/maroon"
            android:textStyle="bold"
            android:textSize="8pt"
            android:paddingRight="10dip"
            android:textAppearance="?android:attr/textAppearanceLarge" 
    />
    

    【讨论】:

    • 您可以在 EDIT 标题下将您编辑的代码发布到您的问题中吗?这样我就可以调查你是否仍然犯了错误。因为问题与您的微调器无关。它似乎只是您指定的适配器,这是我在回答中指出的错误之一。
    • 你仍然有同样的错误:删除 android.R.layout.text1 并在你的适配器定义中将其设置为 R.id.text1 并尝试。
    • 顺便说一句,您在新编辑的代码中进行了哪些更改?我看不出有什么区别!
    • 没有。你把那件事弄错了。我的用户界面中没有文本视图。那 text1(textview) 属于 style1.xml。如果我给 R.id.text1 它会在我的同一个 UI 中查找 text1(我只使用了一个列表视图和一个图像按钮),它会给出错误。没有像 text1 这样的 id。
    • 简单地说,如果我在列表视图中提供静态数据,它会很好地工作。但是当我给出动态数据时。它不会触发事件。
    【解决方案2】:

    您无法使用catlist.performClick() 方法在您的ImageButton OnClickListener 事件中执行spinnerOnItemSelectedListener 事件

    【讨论】:

    • 不。安基特马克瓦纳我们可以表演。它在我的代码中工作。当我使用 strings.xml 中的数组数据时,它工作正常。那不是问题。我已经测试过了。如果我做 setadapter() 声明评论。在上述情况下它工作正常。
    • 让我澄清一下问题:我有两种情况。什么是共同点:一个微调器1。可见性不可见。使用 imagebutton onclick 事件调用。不同: 1. 在第一种情况下,我用数组填充微调器数据(源是 strings.xml,静态数据)。并且它的 onItemSelected 工作正常。 2. 在第二种情况下,我使用 ArrayAdapter(动态数据)填充数据,就像在代码中一样。我使用 setAdapter() 方法。但在这种情况下 onItemSelected 不起作用。
    • 为什么使用 spinner1。可见性不可见。 ?请解释
    • 而不是隐形使用 Gone
    • 我不想显示微调器。当我按下任何图像按钮时,微调器将显示内容。我已经检查过让 spinner1 可见、不可见、消失.. 没有任何区别
    【解决方案3】:

    我不知道为什么以及如何。它现在工作。我在 setadapter 之前添加了一行。

    spnadp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    

    【讨论】:

    • 但无法正常工作。仅当我在微调器中有多个项目并且 .. 不适用于默认选择时,它才有效
    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 2012-11-25
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多