Выбранный элемент Spinner не отображается при нажатии - PullRequest
0 голосов
/ 13 мая 2019

Я добавил счетчик, который извлекает данные из базы данных комнаты, когда я нажимаю на счетчик, он правильно отображает доступные элементы, но при выборе одного он не отображается в выбранном счетчике и ничего не показывает

Я обнаружил, что CollegeSpinner.setOnItemSelectedListener не срабатывает, даже когда я выбираю что-то

    ArrayAdapter<String> adapter;
    CollegeViewModel collegeViewModel;
    Spinner collegeSpinner;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_note);

        collegeSpinner = (Spinner) findViewById(R.id.spinner_college);
        final ArrayList<String> collegesList = new ArrayList<>();
        final CollegeAdapter collegeAdapter = new CollegeAdapter();
        collegeViewModel = ViewModelProviders.of(this).get(CollegeViewModel.class);
        collegeViewModel.getAllColleges().observe(this, new Observer<List<College>>() {
            @Override
            public void onChanged(List<College> colleges) {
                //this is what happens when when data changes // the code bellow should be related to changing the view
                collegeAdapter.setColleges(colleges);  // getting colleges from database and assigning it to collegeadapter
                for (int i = 0; i < collegeAdapter.getItemCount(); i++) { // accessing the adapter to add it's elements to collegeList
                    collegesList.add(collegeAdapter.getCollegeAt(i).getCollegeName());
                }
            }
        });
        adapter = new ArrayAdapter<>(getApplicationContext(), R.layout.small_view, collegesList);
        collegeSpinner.setAdapter(adapter);
        collegeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                // this function doesn't work even when i select something
            }

            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // also doesn't work
            }
        });

    }

Ответы [ 3 ]

1 голос
/ 14 мая 2019

На самом деле я нашел решение, и я не понимаю, почему оно работает, но это связано с тем фактом, что CollegeAdapter объявлен окончательным, но я должен объявить его окончательным, в противном случае я получаю ошибку в onChanged ()

Я сделал функцию, которая добавляет элементы из CollegeAdapter в CollegeList, чтобы функция присваивала значение CollegeAdapter новому CollegeAdapter в параметре, который не является окончательным, и он работал следующим образом

вот как я это реализовал

collegeViewModel.getAllColleges().observe(this, new Observer<List<College>>() {
            @Override
            public void onChanged(List<College> colleges) {
                //this is what happens when when data changes // the code bellow should be related to changing the view 
                collegeAdapter.setColleges(colleges);  // getting colleges from database and assigning it to collegeadapter
                addElements(collegeAdapter, collegesList); 
            }
        });

и вот функция

public void addElements(CollegeAdapter collegeAdapter, ArrayList<String> collegesList) {
        for (int i = 0; i < collegeAdapter.getItemCount(); i++) {
            collegesList.add(collegeAdapter.getCollegeAt(i).getCollegeName());
        }
        collegeSpinner.setAdapter(adapter);
    }
0 голосов
/ 14 мая 2019

перейдите к http://www.jsonschema2pojo.org/, а затем измените тип источника на json, а стиль аннотации на Gson, скопируйте туда весь json и сделайте всю свою модель json в классе java

0 голосов
/ 14 мая 2019
collegeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String str = collegeSpinner.getSelectedItem().toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                String str = llist.get(0);
            }
        });
...