当我不想要时,RecyclerView会调整大小

时间:2016-03-10 14:26:32

标签: android android-recyclerview recycler-adapter

我构建了一个Android应用程序,我在<RecyclerView&gt;中使用<CardView>。我的问题是当我删除CardView时。如果我有3个<CardView>并且我删除了一个,则下一个 public void onDismiss(RecyclerView recyclerView, int[] reverseSortedPositions) { for (int position : reverseSortedPositions) { Tipss.remove(position); } adapter.notifyDataSetChanged(); } 将具有旧版本的大小。

  

请参阅:

enter image description here

  

现在当我删除第一个:

enter image description here

我知道问题出在这里:

  rv=(RecyclerView)findViewById(R.id.rv);
    rv.setHasFixedSize(true);

我使用了错误的adapter.notify方法吗?

修改 主:

public class TipsAdapter extends RecyclerView.Adapter<TipsAdapter.TipsViewHolder> {

public static class TipsViewHolder extends RecyclerView.ViewHolder {

    CardView cv;
    TextView cardTitle;
    TextView cardText;

    TipsViewHolder(View itemView) {
        super(itemView);
        cv = (CardView)itemView.findViewById(R.id.card_view);
        cardTitle = (TextView)itemView.findViewById(R.id.card_title);
        cardText = (TextView)itemView.findViewById(R.id.card_text);
    }
}

List<Tips> Tipss;

TipsAdapter(List<Tips> Tipss){
    this.Tipss = Tipss;
}

@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}

@Override
public TipsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
    TipsViewHolder pvh = new TipsViewHolder(v);
    return pvh;
}

public void addListItem(Tips tip, int i)
{
    Tipss.add(tip);
    notifyItemInserted(i);
}
@Override
public void onBindViewHolder(TipsViewHolder TipsViewHolder, int i) {
    TipsViewHolder.cardTitle.setText(Tipss.get(i).title);
    TipsViewHolder.cardText.setText(Tipss.get(i).text);
}

@Override
public int getItemCount() {
    return Tipss.size();
}

适配器:

{{1}}

你已经删除了一个,并且那个位于main。

2 个答案:

答案 0 :(得分:0)

在您的recycler上设置此方法:

yourRecycler.setHasFixedSize(true)

此内容来自Android APIs docs

  

如果事先知道适配器内容的变化无法改变RecyclerView本身的大小,则RecyclerView可以执行多项优化。如果您使用RecyclerView属于此类别,请将其设置为true。

希望它会有所帮助。

答案 1 :(得分:0)

我明白了。问题出在onDismiss方法上。我需要删除视图adapter.notifyItemRemoved(position);,调用适配器,然后调用此adapter.notifyDataSetChanged();