Spinner显示错误的值

时间:2010-10-10 13:18:13

标签: android spinner

我有一个简单的程序,我将旋转器设置到一个位置。然后我调用第二个模块,当我返回时,我重置了微调器。微调器显示不显示微调器值。当您点击微调器时,它指向正确的值,但它显示的值不正确。事实上,它实际上已经下台了。

我写了以下简单程序来演示。仅当表单在Linearlayout或TableLayout中具有至少1个其他元素的微调器时才会发生这种情况。

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  <TextView  
    android:layout_width="fill_parent" android:layout_height="200dp"
    android:text="Main Form" />

  <LinearLayout android:id="@+id/widget43" 
    android:layout_width="320dp" android:layout_height="wrap_content"
    android:orientation="horizontal" >
    <Button
        android:id="@+id/btn" android:text="Button" android:textSize="16sp"    
        android:layout_width="160dp" android:layout_height="40dp" />
    <Spinner
        android:id="@+id/btnFour" android:textSize="16sp"    
        android:layout_width="160dp" android:layout_height="40dp"    />
  </LinearLayout>       
</LinearLayout>

next.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <TextView android:id="@+id/id1" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Next"
        />
</LinearLayout>

main.java

package tt.zzz;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;

public class main extends Activity {

 @Override
 protected void onCreate(Bundle icicle) 
 {
     super.onCreate(icicle);     
     setContentView(R.layout.main);    
     fillSpinner();

     Button btnGo = (Button) findViewById(R.id.btn);
  btnGo.setOnClickListener(new Button.OnClickListener() {
   public void onClick(View v) { Go(); } });
 }

 void Go() {
  Intent i = new Intent(this, next.class );
  startActivityForResult( i, 0 );
 }

 public void fillSpinner(){
  Spinner spin_test = (Spinner) findViewById( R.id.btnFour );

  ArrayAdapter<CharSequence> myAdapter =
   new ArrayAdapter<CharSequence>(
    this,
    android.R.layout.simple_spinner_item
    );
  myAdapter.setDropDownViewResource(
                    android.R.layout.simple_spinner_dropdown_item);  

  myAdapter.add("Option 1" );
  myAdapter.add("Option 2" );
  myAdapter.add("Option 3" );

  spin_test.setAdapter(myAdapter);
  spin_test.setSelection(1);

  spin_test.setOnItemSelectedListener( 
                new Spinner.OnItemSelectedListener(){
                public void onItemSelected(AdapterView<?> 
                          arg0,View arg1,int arg2,long arg3){
    }
   public void onNothingSelected(AdapterView<?> arg0) {
   }
  }); 
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode,
            Intent intent) {
  super.onActivityResult(requestCode, resultCode, intent);
  fillSpinner(); 
 }
}

next.java

package tt.zzz;

import android.app.Activity;
import android.os.Bundle;

public class next extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.next);
    }
}

3 个答案:

答案 0 :(得分:3)

在setSelection之后,添加以下行:

myAdapter.notifyDataSetChanged();

答案 1 :(得分:2)

我会像barmaley建议的那样做,除了添加以下内容:

@Override
public void onResume()
{
  super.onResume();
  fillSpinner();
}

之所以需要,是因为你发起了另一项活动,所以暂停了这项活动。

答案 2 :(得分:0)

尝试致电

@Override
public void onStart()
{
    super.onStart();
    this.fillSpinner();
}

因为onCreate只调用一次,所以每次你应该在其他地方刷新它时更新Spinner。 onStart() - 适合的地方