CursorAdapter высота строки/элемента списка

В настоящее время я разработал способ использования 5 различных макетов строк в моем списке/курсорадаптере. Однако я столкнулся с проблемой, что мне нужно изменить высоту строки.

У меня есть щелчок, чтобы закрыть, и проведите пальцем, чтобы закрыть функциональность в моем списке. Они работают, заменяя текущий курсор на курсорную обертку и, таким образом, скрывая строку.

Делая это, представление списка берет высоту из удаленного представления и применяет ее к следующей строке в представлении списка. При этом ряд принимает неправильную высоту.

Я думаю, что мой вопрос заключается в том, как заставить метод bindView/newView придать строке правильную высоту.

Мой код:

новый вид:

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

    View v;

    switch (cursor.getInt(Card.CARD_TYPE_COLUMN_INDEX)) {
    case CardViewModel.DepartmentInformation: {
        v =  LayoutInflater.from(context).inflate(R.layout.department_information_card, parent, false);

        DepartmentInformationViewHolder holder = new DepartmentInformationViewHolder();
        holder.mHeader = (CardHeader) v.findViewById(R.id.department_title);
        holder.mHeading = (RelativeLayout) v.findViewById(R.id.department_heading_with_remove_option);
        holder.mRemoveButton = (CardRemoveButton) v.findViewById(R.id.department_heading_remove_button);
        holder.mRemovableHeader = (CardHeader) v.findViewById(R.id.department_heading_title);
        holder.mDescription = (CardText) v.findViewById(R.id.department_description);
        holder.mGallery = (CardGallery) v.findViewById(R.id.department_gallery);
        holder.mButton = (CardButton) v.findViewById(R.id.department_button);

        v.setTag(holder);

        break;
    }

связывание

@Override
public void bindView(View view, Context context, Cursor cursor) {

    String content = cursor.getString(Card.CARD_CONTENT_COLUMN_INDEX);
    int itemType = getItemViewType(cursor.getPosition());

    switch (itemType) {

    case CardViewModel.DepartmentInformation: {

        DepartmentInformationViewModel viewModel = mGson.fromJson(content, DepartmentInformationViewModel.class);
        DepartmentInformationViewHolder holder = (DepartmentInformationViewHolder) view.getTag();

        /**
         * Do the binding of all the components.
         */
        if (cursor.getInt(Card.CARD_REMOVABLE_COLUMN_INDEX) == 1) {
            holder.mHeader.setVisibility(View.VISIBLE);
            bindCardTitle(context, holder.mHeader, viewModel.getTitle());
            holder.mHeading.setVisibility(View.GONE);
        } else {
            holder.mHeading.setVisibility(View.VISIBLE);
            bindCardTitle(context, holder.mRemovableHeader, viewModel.getTitle());
            bindRemoveCardButton(context, holder.mRemoveButton, cursor, cursor.getPosition(), cursor.getString(0));
            holder.mHeader.setVisibility(View.GONE);
        }
        bindCardText(context, holder.mDescription, viewModel.getDescription());
        bindCardGallery(context, holder.mGallery, viewModel.getGallery());
        bindCardButton(context, holder.mButton, viewModel.getButton());

        break;
    }

@Override
public int getItemViewType(int position) {
    Cursor cursor = getCursor();
    cursor.moveToPosition(position);

    switch (cursor.getInt(Card.CARD_TYPE_COLUMN_INDEX)) {
    case CardViewModel.DepartmentInformation: {
        return CardViewModel.DepartmentInformation;
    }
    case CardViewModel.EstablishmentInformation: {
        return CardViewModel.EstablishmentInformation;
    }
    case CardViewModel.EstablishmentOutdoorNavigation: {
        return CardViewModel.EstablishmentOutdoorNavigation;
    }
    case CardViewModel.SuggestionInDoorNavigation: {
        return CardViewModel.SuggestionInDoorNavigation;
    }
    default: {
        return 4;
    }
    }
}

@Override
public int getViewTypeCount() {
    return 5;
}

Ребята, вы знаете, что делать?


person Orion    schedule 23.09.2014    source источник


Ответы (2)


Высота элемента должна быть android:layout_height="fill_parent" Каждый элемент будет занимать необходимое ему пространство, и у вас есть разные высоты для каждого элемента в списке.

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

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ImageView
    android:id="@+id/icon"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:contentDescription="@string/image"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" />

<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/icon"
    android:paddingBottom="10dp"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#CC8439"
    android:textIsSelectable="false" />

<TextView
    android:id="@+id/desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/title"
    android:layout_toRightOf="@+id/icon"
    android:paddingLeft="10dp"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="#3399FF"
    android:textIsSelectable="false" />

<TextView
    android:id="@+id/resrawid"
    android:layout_width="0dip"
    android:layout_height="0dip"
    android:visibility="gone" />


</RelativeLayout>
person danny117    schedule 23.09.2014
comment
Нет, это не имеет значения, равного высоте строки. Моя проблема заключается в переработке представления. У меня есть макет для представления, которое используется для другого представления. Проблема заключается в том, что в одном я показываю вьюпейджер, а в другом ставлю Visibility.GONE. Он не сбрасывает высоту, когда перерабатывает макет. - person Orion; 24.09.2014