0

に型を設定するのに苦労SpinnerしていListます。

目的:Buttonメイン メニューで a が押されると、タスク GetTownsTask が実行Spinnerされ、新しい画面に a が読み込まれますが、Adapter.

MainActivity.java

private class GetTownsTask extends AsyncTask<Void, Void, List<String>> {
    @Override
    protected List<String> doInBackground(Void... p)  {

        // api calls
        List<String> towns = new ArrayList<String>();
        // populate towns
        return towns;
    }

    @Override
    protected void onPostExecute(List<String> townList) {

        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList.toArray( new String[0] ));
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);    // line 124, breaks here
    }
}

クラッシュログ

FATAL EXCEPTION: main, 
java.lang.NullPointerException,
at com.project.MainActivity$TestTask.onPostExecute(MainActivity.java:124)

スピナー画面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#787878">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/townTextView"
        android:layout_below="@+id/townTextView"
        android:layout_marginTop="10dp" />

</RelativeLayout>
4

3 に答える 3

0
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList.toArray( new String[0] ));

オブジェクトをコンストラクターに.toArray渡すことができるので、必要ないようです。List<String>ArrayAdapter

だから試してみて、

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                MainActivity.this, 
                android.R.layout.simple_spinner_dropdown_item, 
                townList);

これは、townList が実際に取り込まれdoInBackground()、その戻り値が渡されていることを前提としています。onPostExecute(townList)

于 2012-11-19T07:51:25.923 に答える
0

問題はtownList.toArray(new String[0]). を使用しtownList.toArray()てみると、作成される String 配列が townList と同じサイズになることが保証されます。

于 2012-07-23T15:49:14.850 に答える
0

//このようにスピナーを設定します

package com.javasamples;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class ArrayAdapterDemo2 extends Activity implements
        AdapterView.OnItemSelectedListener {
    TextView selection;
    String[] items = { "this", "is", "a", "really", 
            "really2", "really3",
            "really4", "really5", "silly", "list" };

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        selection = (TextView) findViewById(R.id.selection);

        Spinner spin = (Spinner) findViewById(R.id.spinner);
        spin.setOnItemSelectedListener(this);

        ArrayAdapter aa = new ArrayAdapter(
                this,
                android.R.layout.simple_spinner_item, 
                items);

        aa.setDropDownViewResource(
           android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(aa);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        selection.setText(items[position]);
    }

    public void onNothingSelected(AdapterView<?> parent) {
        selection.setText("");
    }
}//class

これは確かにあなたを助けるでしょう。

ありがとう :)

于 2012-07-23T15:50:03.337 に答える