1

spinner1 という名前のスピナーが 1 つあります。可視性を非表示に設定。次に、画像ボタンを使用してクリックしてスピナーを起動します。私はstrings.xmlから配列データを与えるとき。onItemSelected を呼び出します。(静的配列)しかし、スピナーのsetadapterにarrayadapterを使用すると。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();
    }
});

これが私がそれを呼ぶ方法です。

私の質問は、アダプターの設定の何が問題なのかです。setadapter を設定しないと正常に動作します。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 Application 強制終了して、これを手に入れました...

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

3 に答える 3

1

コードの次の行のためだけに、あなたはそれを取得していないと思います:

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

ここで、2番目の引数はレイアウトファイルです..しかし、3番目の引数は、レイアウトファイルにあるテキストビューのIDである必要があります.2番目の引数で指定しました.R.id.text1の前にandroidを追加しました. 指定したIDのAndroidのデフォルトレイアウトを調べて取得しません。

したがって、この行を次のように変更してみてください。

(デフォルト レイアウトの場合):

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

そして試してみてください!

詳細については、次を参照してください。

これを参照

編集 :

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" 
/>
于 2012-09-14T05:13:11.403 に答える
0

メソッドを使用 して イベントOnItemSelectedListenerのイベントを実行できませんでし たspinnerImageButton OnClickListenercatlist.performClick()

于 2012-09-14T05:00:23.100 に答える
0

理由と方法がわかりません。その作業は今。setadapter の前に行を追加しました。

spnadp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
于 2012-09-14T09:40:27.093 に答える