Как получить значение Spinner для сохранения в переменной - PullRequest
0 голосов
/ 24 января 2020

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

        Product product = new Product();
        productsList = product.getProducts();

        Spinner spinnerProduct = findViewById(R.id.spinnerProduct);

        String[] arrayProduct = new String[productsList.size()];
        for(int i = 0; i < productsList.size(); i++) {
            arrayProduct[i] = productsList.get(i).nameProduct;
        }

        ArrayAdapter<String> adapterProduct = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arrayProduct);
        adapterProduct.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerProduct.setAdapter(adapterProduct);
        spinnerProduct.setOnItemSelectedListener(onItemSelectedListener1);

        String productSelected=spinnerProduct.getSelectedItem().toString();

AdapterView.OnItemSelectedListener onItemSelectedListener1 =
        new AdapterView.OnItemSelectedListener(){
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {
                Product product = new Product();
                productsList = product.getProducts();
                int[] arrayProduct = new int[productsList.size()];
                for(int i = 0; i < productsList.size(); i++) {
                    arrayProduct[i] = productsList.get(i).stockCurrent;
                }
                String productStock = String.valueOf(arrayProduct[position]);
                product_amount_available.setText(productStock);
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {}
        };

Ответы [ 3 ]

1 голос
/ 24 января 2020

Спиннер использует прослушивание событий, поэтому вы не можете просто делать ниже линейно:

spinnerProduct.setOnItemSelectedListener(onItemSelectedListener1);

String productSelected=spinnerProduct.getSelectedItem().toString();

В основном, ваш код делает настройку слушателя, и сразу после этого он получает произвольное значение / значение по умолчанию от вашего объекта spinnerProduct. Но вы еще не вводили какие-либо данные в счетчик. Вы должны обработать весь пользовательский интерфейс и бизнес-логи c только в методе прослушивателя событий onItemSelected().

0 голосов
/ 24 января 2020

Спасибо за помощь. Я решил это. Я сделал глобальные переменные.

int idProduct,idStorage;
String productSelected,storageSelected;

сначала заполнил счетчики

Product product = new Product();
        productsList = product.getProducts();
        Storage storage = new Storage();
        storageList = storage.getStorage();

        Spinner spinnerProduct = findViewById(R.id.spinnerProduct);
        spinnerProduct.setOnItemSelectedListener(this);

        Spinner spinnerStorage = findViewById(R.id.spinnerStorage);
        spinnerStorage.setOnItemSelectedListener(this);

        String[] arrayProduct = new String[productsList.size()];
        for(int i = 0; i < productsList.size(); i++) {
            arrayProduct[i] = productsList.get(i).nameProduct;
        }
        ArrayAdapter<String> adapterProduct = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, arrayProduct);
        adapterProduct.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerProduct.setAdapter(adapterProduct);
        spinnerProduct.setOnItemSelectedListener(this);

        String[] arrayStorage = new String[storageList.size()];
        for(int i = 0; i < storageList.size(); i++) {
            arrayStorage[i] = storageList.get(i).nameStorage;
        }
        ArrayAdapter<String> adapterStorage = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item,  arrayStorage);
        adapterStorage.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerStorage.setAdapter(adapterStorage);
        spinnerProduct.setOnItemSelectedListener(this);

, затем, как предложили, реализовал onclicklisteners

@Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long l) {

        if(adapterView.getId() == R.id.spinnerProduct)
        {
            idProduct=(int) adapterView.getSelectedItemId();
            productSelected=adapterView.getSelectedItem().toString();

            Product product = new Product();
            productsList = product.getProducts();
            int[] arrayProduct = new int[productsList.size()];
            for(int i = 0; i < productsList.size(); i++) {
                arrayProduct[i] = productsList.get(i).stockCurrent;
            }
            String productStock = String.valueOf(arrayProduct[pos]);
            product_amount_available.setText(productStock);

        }
        else if(adapterView.getId() == R.id.spinnerStorage)
        {
            storageSelected=adapterView.getSelectedItem().toString();
            idStorage=(int) adapterView.getSelectedItemId();
        }

    }


    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }

и наконец я прошел значения в методе, вызываемые кнопкой

btnSaveTransferProduct.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                        saveTransferProduct(idProduct,productSelected, idStorage, storageSelected);
                }
            }
        });
0 голосов
/ 24 января 2020

Вам нужно реализовать OnItemSelectedListener и переопределить

public void onItemSelected(AdapterView<?> parent, View view,
        int pos, long id) {
    // An item was selected. You can retrieve the selected item using
    // parent.getItemAtPosition(pos)
}

public void onNothingSelected(AdapterView<?> parent) {
    // Another interface callback
}

Более подробную информацию можно найти здесь https://developer.android.com/guide/topics/ui/controls/spinner#SelectListener

...