【问题标题】:how to get Spinner List's selected items's text and fill EditText in android with that value如何获取 Spinner List 选定项目文本并使用该值填充 android 中的 EditText
【发布时间】:2014-03-21 21:49:14
【问题描述】:

当我尝试在选择侦听器的 Itemselected 函数中获取 EditText 对象时,该行会抛出 NullPointerException

<resources>
<string-array name="gender">
    <item name="Male">Male</item>
    <item name="Female">Female</item>
</string-array>
</resources>

布局

<EditText
    android:id="@+id/answer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textview1"
    android:layout_below="@+id/textview1"
    android:ems="10"
    android:hint="answer" >

    <requestFocus />
</EditText>

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/answer"
    android:layout_below="@+id/answer"
    android:layout_marginTop="22dp"
    android:entries="@array/gender"
    android:prompt="@string/spin_prompt" />

主要活动

public class MenuActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    Spinner sp= (Spinner) findViewById(R.id.spinner1);
    sp.setOnItemSelectedListener(new SpinnerActivity());

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}


}

微调器活动

public class SpinnerActivity extends Activity implements OnItemSelectedListener{

 public void onItemSelected(AdapterView<?> parent, View view, 
            int pos, long id) {

                String selec = (parent.getItemAtPosition(pos)).toString();

                EditText ans= (EditText) findViewById(R.id.answer); 
                //NullPointerException at the time of retrieving EditText object 

                ans.setText(selec);
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }

}

Log-Cat 错误条目

03-21 17:23:42.232: E/AndroidRuntime(4019): FATAL EXCEPTION: main
03-21 17:23:42.232: E/AndroidRuntime(4019): java.lang.NullPointerException
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.app.Activity.findViewById(Activity.java:1853)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at com.practice.menu.SpinnerActivity.onItemSelected(SpinnerActivity.java:19)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.widget.AdapterView.fireOnSelected(AdapterView.java:892)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.widget.AdapterView.access$200(AdapterView.java:49)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:860)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.os.Handler.handleCallback(Handler.java:730)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.os.Looper.loop(Looper.java:137)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at java.lang.reflect.Method.invokeNative(Native Method)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at java.lang.reflect.Method.invoke(Method.java:525)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-21 17:23:42.232: E/AndroidRuntime(4019):     at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 完整的 NPE 堆栈跟踪会有所帮助
  • @donfuxx 我是 android 和 eclipse 的新手,所以你的意思是来自 NPE 堆栈跟踪的 Log-Cat 中显示的错误
  • SpinnerActivity 的 onCreate 方法是什么?
  • 是的,logcat @UDB 中显示的错误
  • @donfuxx 我已经添加了 NPE 堆栈跟踪

标签: android nullpointerexception android-spinner android-ui android-event


【解决方案1】:

这里:

sp.setOnItemSelectedListener(new SpinnerActivity());

您正在尝试实例化另一个活动,并尝试将其设置为侦听器。这是行不通的,因为 Android 活动不喜欢显式实例化它。

尝试像这样为您的微调器实现监听器:

    sp.setOnItemSelectedListener(new OnItemSelectedListener() {

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

        }

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

        }

    });

你不再需要的 SpinnerActivity

【讨论】:

    【解决方案2】:

    这个方法也很简单。确保 OnonItemSelected 变量应该像 i,l 一样定义。

    `String spinnerText3=Spinner3.getSelectedItem().toString();

    Spinner3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> sdocode, View view,int i, long l) {
            // TODO Auto-generated method stub
    
            editText.setFocusableInTouchMode(true); 
            editText.requestFocus();
    
        }
        @Override
        public void onNothingSelected(
                AdapterView<?> arg0) {
            // TODO Auto-generated method stub
                    }});`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多