Как получить пользовательский ввод из поля ввода текста в Android? - PullRequest
0 голосов
/ 21 ноября 2011

на веб-сайте 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 ]

3 голосов
/ 21 ноября 2011
textView.getText();

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

В настоящее время ваш код не подключает слушателя к текстовому представлению.

Вам необходимо (а) использовать непосредственного слушателя:

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 ищет его по идентификатору, а выбранный слушатель просто обновляет его.

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) { }
    });
}
2 голосов
/ 21 ноября 2011

Попробуйте:

textView.getText().toString(); 

Затем отобразите его через тост.

2 голосов
/ 21 ноября 2011

Лучшим способом было бы установить «прослушиватель выбранного элемента», который будет уведомлять вас, когда пользователь выберет что-то из доступных записей. См. документы . При этом вы можете получить элемент из выбранного адаптера (и, наоборот, все, что вы определили для текста этого элемента).

Пример:

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) {}
});
1 голос
/ 06 июля 2016

Использование:

textView.getText (). ToString ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...