1

简单地说,我创建了一个微调器。在 my 中有微调条目和条目值array.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string-array name="select">
        <item>a</item>
        <item>b</item>
        <item>c</item>
    </string-array>

    <integer-array name="selectValues">
        <item>1</item>
        <item>2</item>
        <item>3</item>
    </integer-array>

</resources>

这里也是我的linearlayout.

<?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" 
    android:id="@+id/selectLayout"
    >

    <TextView
        android:id="@+id/tvSelect"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="@string/select"
        android:textSize="18sp"
        android:layout_gravity="center"
         />

    <Spinner
        android:id="@+id/sSelect"
        android:layout_width="179dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:entries="@array/select"
        android:prompt="@string/sec"
        android:spinnerMode="dialog"
         />

</LinearLayout>

在我创建的活动中OnItemSelectedListener,当用户选择一个项目时,我想更改TextView. 我认为使用switch时有问题。

这里是活动。

public class Select extends Activity implements OnItemSelectedListener{

    int[] itemValues;
    TextView t;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        Resources rsc = getResources();
        itemValues = rsc.getIntArray(R.array.selectValues);
        t = (TextView) findViewById(R.id.tvSelect);

        setContentView(R.layout.select);

        Spinner form = (Spinner) findViewById(R.id.sSelect);
        form.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> item, View which, int sort,
            long arg3) {
        // TODO Auto-generated method stub

        switch(which.getId())
        {
        case R.id.sSelect:
            int value = itemValues[sort];
            t.setText(value);
            break;
        }

    }

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

    }



}

如何解决?

编辑:当我尝试删除开关时,unfortunately has stopped出现错误。

4

9 回答 9

1
  1. 正如 Spring Breaker 所说,您需要在调用setContentView()之前先调用findViewById()。如果您findViewById()先调用,它将返回 null,并且您将NullPointerException在尝试使用TextView.

  2. onItemSelected(),which实际上并不是对 的引用SpinnerSpinner它是对包含用户按下的特定项目的子视图的引用。您需要切换第一个参数,AdapterView<?>.

  3. setText()期望引用 XML 字符串的 aString或资源值。int你传递给它一个int,但不是一个资源值,所以它不起作用。这是一个快速的解决方法:

    String value = String.valueOf(itemValues[position]);
    t.setText(value);
    
于 2013-09-27T18:06:23.277 回答
0

试试 t.setText(String.valueOf(value));

可能工作并在 textview 之前设置 contentview

于 2013-09-27T07:35:55.480 回答
0

switch将您的语句更改为以下代码。

        switch(sort)
        {
            case 0:
                int value = itemValues[0];
                t.setText(value);
                break;
            case 1:
                int value = itemValues[1];
                t.setText(value);
                break;
        }
于 2013-09-27T08:25:54.197 回答
0

这样做。。

    form.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int sort, long arg3) {
                int value = itemValues[sort];
                t.setText(value);
        }
    });
于 2013-09-27T07:23:46.020 回答
0

我有一个类似的问题。我通过实现监听器内联并调用特定函数来解决这个问题。从调试器中我了解到发送的 id 与微调器 id 无关

于 2014-04-01T05:38:31.620 回答
0

which.getId() 返回的是 spinner 中选中的 item 的 id,而不是 spinner 的 ID,R.id.sSelect 是 spinner 的 id

于 2013-09-27T07:21:51.000 回答
0

在定义视图之前使用 setcontentview() 方法

即在此行之前 -> t = (TextView) findViewById(R.id.tvSelect);

于 2013-09-27T07:26:01.637 回答
0

您必须 setContentView(R.layout.select);在引用布局文件中的任何 ID 之前使用。在您的情况下,onCreate()应如下所示,

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            setContentView(R.layout.select);

            Resources rsc = getResources();
            itemValues = rsc.getIntArray(R.array.selectValues);
            t = (TextView) findViewById(R.id.tvSelect);                  
            Spinner form = (Spinner) findViewById(R.id.sSelect);
            form.setOnItemSelectedListener(this);
        }
 @Override
        public void onItemSelected(AdapterView<?> item, View which, int sort,
                long arg3) {


             String  SpinerValue3 = item.getItemAtPosition(sort).toString();
             t.setText(SpinerValue3);
        }
于 2013-09-27T07:31:20.880 回答
0
switch(which.getId())
        {
        case R.id.sSelect:
            t.setText(form.getselecteditem().tostring());
            break;
        }
于 2013-09-27T07:34:28.987 回答