Проблемы с установкой двух layoutsType в CursorAdapter

я пытаюсь установить адаптер курсора с двумя разными макетами, первый должен быть уникальным, остальные - одинаковыми, но getItemViewType(cursor.getPosition()); всегда возвращает 0...

вот мой адаптер:

открытый класс MyAdapter расширяет CursorAdapter

public static class ViewHolder {

 public ViewHolder (View rootView){}}

public ProfileAdapter(Activity activity, Cursor c) {
        super(activity, c);
        mActivity = activity;
    }

@Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        int mLayoutId = -1;
        mViewType = getItemViewType(cursor.getPosition());
        if (mViewType == VIEW_TYPE_MAIN){
            mLayoutId = R.layout.main;
        } else {
            mLayoutId = R.layout.list_items;
        }

        View rootView = LayoutInflater.from(context).inflate(mLayoutId, parent, false);
        ViewHolder viewHolder = new ViewHolder(rootView);
        rootView.setTag(viewHolder);
        return rootView;

    }


@Override
    public void bindView(View view, Context context, Cursor cursor) {
        mCursor = cursor;
        mView = view;
        mViewHolder = (ViewHolder) view.getTag();
        mViewType = getItemViewType(cursor.getPosition());
        if (mViewType == VIEW_TYPE_MAIN){

        } else {
        }
    }

ощущение, что я упускаю что-то очень простое... Буду рад любым идеям, как решить эту проблему!


person Stan Malcolm    schedule 08.07.2015    source источник


Ответы (1)


Ваш адаптер должен реализовать getViewTypeCount() (и вернуть 2 в вашем случае), а также реализовать getItemViewType(). Реализация по умолчанию ничего не знает о ваших данных и не будет пытаться это понять. Он просто обработает случай, когда используется только один тип представления (поэтому возвращается 0). Добавьте недостающие методы, и все будет хорошо.

person Marcin Orlowski    schedule 08.07.2015