Ich habe dies auf folgende Weise geschehen.
Hinweis: In meiner Lösung ist der Teiler Teil der Objektansicht, Sie können stattdessen einen Hintergrund festlegen oder eine Linie zeichnen, oder fügen Sie einen unteren Rand hinzu und lassen Sie den Raum den Hintergrund und damit eine Trennwand usw. Ich empfehle den Blick auf die ItemDecoration API. Ich zeige Ihnen nur, wie Sie in ItemDecoration bestimmen, was Sie tun möchten.
Zuerst in Ihrem Adapter:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
...
if (mData.get(postion) instanceof ObjectA)
holder.itemView.setTag(R.id.noSpaceAfter, Boolean.TRUE);
else
holder.itemView.setTag(R.id.noSpaceAfter, Boolean.FALSE);
...
}
Dann in Ihrem RecyclerView
erklären eine ItemDecoration
mRecyclerView.addItemDecoration(new MyDividerItemDecoration());
Schließlich definieren Sie Ihre MyDividerItemDecorator
public class MyDividerItemDecoration extends RecyclerView.ItemDecoration {
public MyDividerItemDecoration() {
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
Boolean noSpace = (Boolean) view.getTag(R.id.noSpaceAfter);
View v = view.findViewById(R.id.view_sep);
if (v != null) {
if (noSpace == null || !noSpace) {
v.setVisibility(View.VISIBLE);
} else {
v.setVisibility(View.INVISIBLE);
}
}
}
}
dies mit im Auge, Sie kann nur die Quelle für DividerItemDecoration und th kopieren Wenn Sie in der Schleife drawVertical
aufrufen, überprüfen Sie, ob R.id.noSpaceAfter
wahr oder falsch ist, und überspringen Sie die Zeichnung entsprechend.
Vielen Dank, es funktioniert als schnelle Lösung, aber ich ziehe robustere ein. – qbait