Использовать на «Адаптере» для двух (или более) родительских представлений? - PullRequest
1 голос
/ 02 января 2012

Можно ли использовать один класс адаптера (и его экземпляр) (например, собственный подкласс ArrayAdapter<ownDataType> для двух (или более) разных представлений?

В моем Activity у меня есть два Spinner объекта, которые используются для отображения (и выбора) связанных данных: список родительских категорий и список подкатегорий выбранной родительской категории. Конечно, список в подкатегории - Spinner обновляется (устанавливает новый ArrayAdapter), когда изменяется родительская категория. Однако я также хочу иметь возможность установить подкатегорию напрямую (и автоматически выбрать родительскую категорию) при создании действия. Это усложняет ситуацию.

Моя идея для простого и понятного решения сейчас состоит в том, чтобы создать ОДИН собственный класс-адаптер (например, полученный из ArrayAdapter<CategoryPair>, где CategoryPair - простой класс, содержащий пару родительских и подкатегорий), и это собственный класс адаптера обрабатывает всю логику для обеспечения согласованности данных (намного проще).

В методе getView(int position, View convertView, ViewGroup parent) класса Adapter мне нужно надежно распознать, для какого из двух объектов Spinner в моей деятельности мне нужно создать представление.

Можно ли положиться на параметр parent?

Как вы думаете, моя идея хорошая?

Редактировать: Пример кода:

Мой класс адаптера:

public class CategoryPair
{
    Category parent;        
    Category sub;
}

public class CategoriesAdapter extends ArrayAdapter<CategoryPair> {
    private Spinner parentSpinner;
    private Spinner subSpinner;
    public CategoriesAdapter(Context context, int textViewResourceId, Spinner par, Spinner sub) {
        super(context, textViewResourceId);
        parentSpinner = par;
        subSpinner = sub;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (parent == parentSpinner)
        {
            //
        }
        else if (parent == subSpinner)
        {
            //
        }
        else
        {
            Log.e(TAG, "Invalid parent in CategoriesAdapter");
        }                   
        return super.getView(position, convertView, parent);
    }

1 Ответ

1 голос
/ 02 января 2012

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

...