Я использую эту библиотеку для создания мазковой-возможности карты: https://github.com/Diolor/SwipecardsКаковы условия, при которых адаптер не обновляет присоединенные вид
мнения, что делает салфетки-карту в состоянии контролировать, привязываются к адаптеру и источники, которые он извлекает из него.
В моей реализации каждая карта имеет кнопку, и когда ее щелкают, происходит что-то в исходном массиве, для которого я хочу обновить весь список карт. Я вызываю notifyDataSetChanged()
на соответствующем адаптере, но getView()
никогда не вызывается в адаптере для просмотра каких-либо обновлений.
Что странно, что тот же адаптер отлично работает с ListView
Есть ли какие-либо конкретные требования либо в стороне адаптера или само представление, которое требуется для правильного функционирования notifyDataSetChanged?
Моего код:
(Просьба игнорировать отсутствие ViewHolder рисунка и наличие щелчка приемников внутри адаптера качество коды является наименее, что я могу быть обеспокоен прямо сейчас, когда решающая функциональность не работает.)
адаптер (с использованием массива Adapter)
public class TourCardAdapter extends ArrayAdapter<TourCardBean> implements View.OnClickListener {
Context context;
ToursFragment.ToursControlsClickListener clickListener;
public TourCardAdapter(Context context, ArrayList<TourCardBean> tourCardsArr, ToursFragment.ToursControlsClickListener clickListener) {
super(context, 0, tourCardsArr);
this.context = context;
this.clickListener = clickListener;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View rowView = convertView;
ViewHolder viewHolder;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
TourCardBean tourCard = getItem(position);
rowView = inflater.inflate(R.layout.card_tour, parent, false);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) rowView
.findViewById(R.id.title);
viewHolder.detail = (TextView) rowView
.findViewById(R.id.detail);
viewHolder.likeCount = (TextView) rowView
.findViewById(R.id.likeCount);
viewHolder.image = (ImageView) rowView
.findViewById(R.id.cardLocationImage);
viewHolder.likeButton = (ImageView) rowView
.findViewById(R.id.cardLikeImage);
viewHolder.shareButton = (ImageView) rowView
.findViewById(R.id.cardShareImage);
viewHolder.likeButton.setOnClickListener(this);
viewHolder.shareButton.setOnClickListener(this);
viewHolder.title.setText(tourCard.getTitle());
viewHolder.detail.setText(tourCard.getDetails());
viewHolder.likeCount.setText("" + tourCard.getLikeCount());
viewHolder.likeButton.setTag(tourCard.getId());
viewHolder.shareButton.setTag(tourCard.getId());
return rowView;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.cardLikeImage:
clickListener.onLikeClick((int) v.getTag());
break;
case R.id.cardShareImage:
clickListener.onShareClick((int) v.getTag());
break;
}
}
/**
* View Holder for ListView
*
* @author Aman Alam
*/
class ViewHolder {
public ImageView image;
public ImageView likeButton;
public ImageView shareButton;
public TextView title;
public TextView detail;
public TextView likeCount;
}
}
Основываясь на некоторых проблемах, зарегистрированных в библиотеке Swipecards, похоже, что у него могут быть ошибки, которые мешают ему обновлять представления на 'notifyDataSetChanged()'. [Этот] (https://github.com/Diolor/Swipecards/issues/29) содержит несколько обходных решений, которые могут сработать для вас. В частности, 'flingContainer.removeAllViewsInLayout()'. – Bradford2000
@ Bradford2000 Это было очень полезно, ссылка на всю проблему. Спасибо огромное! :) Можете ли вы написать это как ответ, чтобы я мог принять его как правильный ответ? –
Готово. Рад, что помогло! – Bradford2000