【问题标题】:use Button to get text in EditText and Spinner使用 Button 在 EditText 和 Spinner 中获取文本
【发布时间】:2012-12-05 23:54:53
【问题描述】:

我想同时从 EditText 和 Spinner 获取文本,但是当我选择 All types 以外的类型时,它本身会更改为 All types。

我的问题是为什么 Feature Flim 在我单击发送按钮后会自行更改为所有类型,而不是如何在微调器中获取所选项目。

strings.xml:

<string-array name="country_arrays">
<item>All Types</item>
<item>Feature Flim</item>
<item>TV Series</item>
<item>Video Games</item>
</string-array>

activity_main.xml:

<Spinner
    android:id="@+id/spinner1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:entries="@array/country_arrays"
     />

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_send" 
    android:onClick="sendMessage"/>

这是 MainActicity.java 中的函数 sendMessage:

public void sendMessage(View view) {

    final Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
            R.array.country_arrays, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Toast.makeText(getBaseContext(), 
                "You have selected the book: " + String.valueOf(spinner.getSelectedItem()), 
                Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });

    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString() + String.valueOf(spinner.getSelectedItem());
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
}

和 DisplayMessageActivity.java:

public class DisplayMessageActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

    // Create the text view
    TextView textView = new TextView(this);
    textView.setTextSize(40);
    textView.setText(message);

    // Set the text view as the activity layout
    setContentView(textView);


}

我选择专题片:

点击发送后

终于显示出来了:

为什么它自己会变成所有类型?如何解决?

【问题讨论】:

    标签: android android-layout android-intent android-emulator


    【解决方案1】:

    您正在sendMessage 中设置适配器和数据。因此,每次您点击“发送”时,Spinner 都会被重新填充,从而再次位于位置 0。

    相反,请执行以下操作:

    首先,在你的类声明中加入以下行:

    private Spinner spinner = null;
    

    其次,将这些移至onCreate()(或您呼叫的任何地方setContentView()):

    spinner = (Spinner) findViewById(R.id.spinner1); // Do not re-declare
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
    R.array.country_arrays, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
            Toast.makeText(getBaseContext(), 
                "You have selected the book: " + String.valueOf(spinner.getSelectedItem()), 
                Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
        }
    });
    

    第三也是最后,在您的 sendMessage() 方法中保留以下内容:

    Intent intent = new Intent(this, DisplayMessageActivity.class);
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString() + String.valueOf(spinner.getSelectedItem());
    intent.putExtra(EXTRA_MESSAGE, message);
    startActivity(intent);
    

    【讨论】:

    • 我会移动 EditText editText = (EditText) findViewById(R.id.edit_message);虽然作为一个私人领域,但这只是一个品味问题。
    【解决方案2】:

    尝试以其他方式获取文本:

    spinner.geItemAtPosition(arg2).toString();
    

    【讨论】:

    • 你的意思是在公共 void onItemSelected(AdapterView> arg0, View arg1, int arg2, long arg3)?
    【解决方案3】:

    要获取 Spinner 的选中项,请执行以下操作:

    Spinner mySpinner=(Spinner)findViewById(R.id.Spinner_Id);
    mySpinner.getSelectedItem().toString();
    

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2011-03-31
      相关资源
      最近更新 更多