如何从Android中的文本输入框获取用户输入?

时间:2011-11-21 00:02:36

标签: java android android-layout android-widget

在Android网站上,我发现了一篇关于如何创建提供自动完成建议的文本输入窗口小部件的文章。 (以下是该站点的链接;它显示了所有代码)。

http://developer.android.com/resources/tutorials/views/hello-autocomplete.html

有谁能告诉我如何捕获用户输入的输入?例如,如果用户选择“加拿大”,有没有办法可以知道“HelloAutoComplete.java”活动中的结果?任何帮助将不胜感激。

public class HelloAutoComplete extends Activity {

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

    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
    String[] countries = getResources().getStringArray(R.array.countries_array);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);
    textView.setAdapter(adapter);       

    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            if (adapterView.getItemAtPosition(i).toString().equals("Canada")) {
                Toast.makeText(getApplicationContext(), "Result Canada", Toast.LENGTH_SHORT).show();
            }  //Does not get an out put when I select Canada.
        }

        public void onNothingSelected(AdapterView<?> adapterView) {
        }
    });

}  }

4 个答案:

答案 0 :(得分:3)

textView.getText();

textView.getText().toString(); // If you need an actual String

目前,您的代码未将侦听器连接到文本视图。

你需要(a)使用一个直接的监听器:

textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        if (adapterView.getItemAtPosition(i).toString().equals("Canada")) {
            Toast.makeText(getApplicationContext(), "Result Canada", Toast.LENGTH_SHORT).show();
        }
    }

    public void onNothingSelected(AdapterView<?> adapterView) {
    }
});

或者(b)如果你想将这个活动用作监听器(我不会)让它实现接口并将itemSelectedListener设置为此。但是你好。


要将所选文本设置为另一个文本元素,必须进行一些更改。首先,布局现在必须包括自动完成“组件”和附加文本视图。我们将“父”布局设置为垂直方向,为自动选择内容创建新的水平布局,并添加新的文本视图。

<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
              a:orientation="vertical"
              a:layout_width="fill_parent"
              a:layout_height="wrap_content"
              a:padding="5dp">

  <LinearLayout a:orientation="horizontal"
                a:layout_width="fill_parent"
                a:layout_height="wrap_content">
    <TextView a:layout_width="wrap_content"
              a:layout_height="wrap_content"
              a:text="Country"/>

    <AutoCompleteTextView a:id="@+id/autocomplete_country"
                          a:layout_width="fill_parent"
                          a:layout_height="wrap_content"
                          a:layout_marginLeft="5dp"/>
  </LinearLayout>

  <TextView a:id="@+id/selected_country"
            a:layout_height="wrap_content"
            a:layout_width="fill_parent"/>
</LinearLayout>

活动获取一个新的TextView实例属性,我正在调用selectedCountry。我没有表明它的声明。 onCreate方法按ID查找,而select侦听器只是更新它。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Text view for selected country.
    selectedCountry = (TextView) findViewById(R.id.selected_country);

    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            selectedCountry.setText(adapterView.getItemAtPosition(i).toString());
        }
        public void onNothingSelected(AdapterView<?> adapterView) { }
    });
}

答案 1 :(得分:2)

最好的方法是设置一个&#34;项目选择的监听器&#34;当用户从可用条目中选择某些内容时,它会通知您。请参阅docs。通过这种方式,您可以从他们选择的适配器中获取该项目(反之,无论您为该项目的文本定义了什么)。

示例:

textView.setOnItemSelectedListener( new OnItemSelectedListener() {
  @Override
  public void onItemSelected(AdapterView<?> adapterView, View selectedView, 
         int selectedPosition, long selectedId) {
         //do stuff here     
  }

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

答案 2 :(得分:2)

试试这个:

textView.getText().toString(); 

然后通过Toast显示它。

答案 3 :(得分:1)

使用:

textView.getText()。的toString()