Подтвердить что ты не робот

Использование Android AutoCompleteTextView с ArrayAdapter <Objects> вместо ArrayAdapter <Строки>

Я хотел использовать AutoCompleteTextView в своем приложении для Android. Я знаю, как использовать его с простым массивом строк, но я хотел, чтобы AutoCompleteTextView использовал список объектов для выполнения завершения. Мой код для этого следующий:

КОД ДЕЯТЕЛЬНОСТИ

public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);

        initialize();
        ArrayAdapter<Student> adapter = new ArrayAdapter<Student>(this,
                R.layout.dropdown_list_item, GetAllStudentsList());

        searchBox.setAdapter(adapter);
        searchBox.setThreshold(THRESHOLD_VALUE);
        searchBox.setTextColor(Color.BLACK);
}

searchBox.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterView, View view,
                int position, long arg3) {
                     //Here i will grab the Student object that user selected from drop-down

        }

    });

public ArrayList<Movies> GetAllStudentsList() {

//This method returns a ArrayList of <Student> type objects
}

Студент Класс Объект содержит информацию о студенте, который ID,NAME,ADDRESS,MARKS.

Я знаю, что AutoCompleteTextView нуждается в массиве объекта типа String для выполнения операции поиска. В моем случае я хочу, чтобы AutoCompleteTextView использовал мой ArrayList для выполнения завершения на основе поля объекта Student NAME.I не знаю, как я должен указывать AutoCompleteTextView для использования NAME объекта Student. Пожалуйста, помогите мне предоставить любую ссылку или небольшой пример.

Спасибо

4b9b3361

Ответ 1

Два способа:

  • Переопределить toString() в Student класс и вернуть его name. Вы можете получить объект, который был выбран с помощью следующего кода:

     public static class Student {
    
        private String name;
    
            public Student(String name) {
                this.name = name;
            }
    
            @Override
            public String toString() {
                return name;
            }
    
        }
    
    AutoCompleteTextView tv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);
    final ArrayList<Student> list = new ArrayList<MainActivity.Student>();
    list.add(new Student("Viru"));
    list.add(new Student("Gauti"));
    ArrayAdapter<Student> adapter = new ArrayAdapter<MainActivity.Student>(
            this, android.R.layout.simple_dropdown_item_1line, list);
    tv.setAdapter(adapter);
    
    tv.setOnItemClickListener(new OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Student selected = (Student) arg0.getAdapter().getItem(arg2);
            Toast.makeText(MainActivity.this,
                    "Clicked " + arg2 + " name: " + selected.name,
                    Toast.LENGTH_SHORT).show();
        }
    });
    
  • Внедрение пользовательского адаптера (путем расширения класса BaseAdapter или класса ArrayAdapter<Student>). Проверьте этот учебник: http://www.ezzylearning.com/tutorial.aspx?tid=1763429

Ответ 2

Вы можете использовать AbstractList, чтобы получить представление String каждого элемента в списке объектов.

private void setupAutoComplete(AutoCompleteTextView view, List<T> objects) {
    List<String> names = new AbstractList<String>() {
        @Override
        public int size() { return objects.size(); }

        @Override
        public String get(int location) {
            return objects.get(location).getName();
        }
    };

    view.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, names));
}

Ответ 3

если вы хотите добавить данные в String [] arr = new String [100]; тогда это неправильно. Вы можете выполнять ту же работу, что и в форме ArrayList, но помните, что вы никогда не будете помещать здесь класс Getter/Setter. Просто объявите это. Посмотрите этот пример.

Объявите в основном разделе:

 ArrayList<String>arr=new ArrayList<>();

а затем инициализируйте его следующим образом:

 for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jsonObject1 = (JSONObject) jsonArray.get(i);
                    String imei = jsonObject1.getString("imei");
                    String name = jsonObject1.getString("name");
                    String my_pic = jsonObject1.getString("my_pic");
                    String email = jsonObject1.getString("email");

                    arr.add(name);
                }


                adapter= new ArrayAdapter<>
                        (this, android.R.layout.select_dialog_item, arr);
                autoCompleteText.setThreshold(1);//will start working from first character
                autoCompleteText.setAdapter(adapter);//setting the adapter data into the AutoCompleteTextView
                autoCompleteText.setTextColor(Color.RED);


            }

Я надеюсь, что это будет работать для вас....