В настоящее время я разработал способ использования 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;
}
Ребята, вы знаете, что делать?