Многократные обновления Spinner для Android - PullRequest
1 голос
/ 03 апреля 2012

Хорошо, я работаю над приложением для Android.В одном из действий моего приложения (называемом конвертированием) уже есть 3 пустых блесны (пока мы будем игнорировать третий).Один основной счетчик позволяет пользователю выбирать такие темы, как температура, давление или объем.

public class Convert extends Activity{
    String category = MySingleton.getInstance().getCategory();
    protected DataStorage appState;
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        setContentView(R.layout.convert);

        appState = (DataStorage)getApplication();

        // Category Info
        Spinner convertTopic = (Spinner) findViewById(R.id.convertTopic);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.convertTopic_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        convertTopic.setAdapter(adapter);

        category = MySingleton.getInstance().getCategory();
        // Subcategory Info
        Spinner inputUnit = (Spinner) findViewById(R.id.inputUnit);
        ArrayAdapter<CharSequence> adapter2;
        adapter2 = ArrayAdapter.createFromResource(this, R.array.blank_array, android.R.layout.simple_spinner_item);
        if(category.equals("Temperature"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitTemperature_array, android.R.layout.simple_spinner_item);
        else if(category.equals("Pressure"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitPressure_array, android.R.layout.simple_spinner_item);
        else if(category.equals("Volume"))
            adapter2 = ArrayAdapter.createFromResource(this, R.array.convertUnitVolume_array, android.R.layout.simple_spinner_item);

        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        inputUnit.setAdapter(adapter2);

        convertTopic.setOnItemSelectedListener(new OnTopicSelectedListener());
    }
}

У меня также есть отдельный класс, который обрабатывает мой первый выбор прядильщика.

public class OnTopicSelectedListener implements OnItemSelectedListener{
    String category = MySingleton.getInstance().getCategory();
    protected DataStorage appState;

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        if(parent.getItemAtPosition(pos).toString().length() != 0){
            Toast.makeText(parent.getContext(), "Working with " +
                parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
        }
       category = parent.getItemAtPosition(pos).toString();
       MySingleton.getInstance().setCategory(category);
    }

    @SuppressWarnings("rawtypes")
    public void onNothingSelected(AdapterView parent){
        // Do nothing.
    }
}

Моя проблема довольно проста, но я не нашел ее решения.Всякий раз, когда начинается эта деятельность, все остается пустым, как и ожидалось.Однако всякий раз, когда кто-либо выбирает параметр из основного счетчика convertTopic , второй счетчик не будет обновляться.

Единственный способ обновить второй счетчик - это вернуться к предыдущему действию и вернуться к действию преобразования.Основной счетчик снова будет пустым, но второй счетчик обновится.

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

Я прошу прощения, если мой вопрос не ясен.Я впервые задаю вопрос на этом сайте.

1 Ответ

0 голосов
/ 03 апреля 2012

Вместо того чтобы делать OnItemSelectedListener отдельным классом, сделайте его внутренним классом Convert. Затем сделайте ваши переменные счетчика членами Convert вместо просто локальных переменных в onCreate. Теперь ваш внутренний класс будет иметь прямой доступ ко второму счетчику, что позволит вам манипулировать им из метода onItemSelected.

Для объяснения внутреннего класса без андроида вы можете обратиться к Java Tutorials здесь .

...