Переменная объекта - PullRequest
0 голосов
/ 28 ноября 2018

Мой код повторяется, и я хочу знать, есть ли у кого-нибудь лучший способ сделать это.
Можно ли создать переменную R.array.spinner_marque?

РЕДАКТИРОВАТЬ: у меня есть два счетчика, и когда я нажимаю на марке, мой другой счетчик дает мне другие данные.Проблема в том, что мне нужно копировать один и тот же код для каждого бренда.

switch (String.valueOf(parent.getSelectedItem())) {
        case "Dunlop":
            dunlop();
            break;
        case "Falken":
            falken();
            break;
        case "Firestone":
            firestone();
            break;
        case "General Tire":
            general_tire();
            break;

private void marque() {
    // Create an ArrayAdapter using the string array and a default spinner layout
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),
            R.array.spinner_marque, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
    spinner_marque.setAdapter(adapter);
}

private void dunlop() {
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),
            R.array.spinner_dunlop, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_serie.setAdapter(adapter);
}

private void falken() {
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),
            R.array.spinner_falken, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_serie.setAdapter(adapter);
}

private void firestone() {
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),
            R.array.spinner_firestone, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner_serie.setAdapter(adapter);
}

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Вы можете использовать функции для этого вида повторяющегося кода, см. Ниже код

    private ArrayAdapter<?> inflateSpinnerAdapter(Context context, Spinner spinnerName, int spinnerArray, int spinnerLayout) {
    //Here <?> defines that return type inflateSpinner is a generic.
    ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(context,
            spinnerArray, spinnerLayout);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerName.setAdapter(adapter);
    return adapter;
}

Как использовать вышеупомянутую функцию, проверьте код ниже

ArrayAdapter<CharSequence> marqueAdapter = inflateSpinnerAdapter(this , YOUR_SPINNER_NAME , R.array.spinner_qts , android.R.layout.simple_spinner_item);

Надеюсь, этот ответ поможетчтобы понять необходимость функций в вашем коде.

0 голосов
/ 28 ноября 2018

Вы можете проверить документ здесь: https://developer.android.com/guide/topics/resources/string-resource#java

Файл XML, сохраненный по адресу res / values ​​/ strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

Этот код приложения извлекает массив строк:

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);
0 голосов
/ 28 ноября 2018

Вы можете создать один метод, который создает все эти адаптеры

private ArrayAdapter<CharSequence> createFrom(@ArrayRes int arrayRes) {
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),
                arrayRes, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        return adapter;
    }

Затем вы можете использовать его в своем коде, например

private void marque() {
    spinner_marque.setAdapter(createFrom(R.array.spinner_marque));
}

или

private void marque() {
    ArrayAdapter<CharSequence> adapter = createFrom(R.array.spinner_marque);
    spinner_marque.setAdapter(adapter);
}
0 голосов
/ 28 ноября 2018

Определите метод (содержимое, как один из ваших трех методов выше), где вы передаете ресурс макета, вы хотите использовать:

private void xyz(int arrayResourceId) { … }

, но замените ваш R.layout.[whatever] на:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(), arrayResourceId, 
android.R.layout.simple_spinner_item);

Для marque -метода это будет выглядеть как

private void marque() {
    xyz(R.array.spinner_marque);
}
...