Chcę wyświetlić przycisk na końcu okna RecyclerView.Jak dodać przycisk na końcu okna RecyclerView?
Z ListView była metoda addFooterView(), jak zrobić to samo z RecylerView.
Chcę wyświetlić przycisk na końcu okna RecyclerView.Jak dodać przycisk na końcu okna RecyclerView?
Z ListView była metoda addFooterView(), jak zrobić to samo z RecylerView.
Jednym ze sposobów na zrobienie tego byłoby uczynienie stopki widoku typu "ViewType" adaptera. W tym celu zastępuje getItemViewType, aby zwrócić inną wartość dla ostatniego przedmiotu.
@Override
public int getItemViewType(int position) {
return (position == mData.size()) ? VIEW_TYPE_FOOTER : VIEW_TYPE_CELL;
}
Następnie w onCreateViewHolder obsługuje różne viewType.
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == VIEW_TYPE_CELL) {
//Create viewholder for your default cell
}
else {
//Create viewholder for your footer view
}
}
Nie zapomnij zaktualizować wartość o zwrot getCount() przez dodanie 1 i rozróżnić 2 rodzaje ViewHolder w OnBindViewHolder (z instanceof na przykład).
Dzięki Crumble. –
Natknąłem się na ten problem i znalazłem tę odpowiedź. Bieżąca wybrana odpowiedź jest poprawna, ale brakuje niektórych szczegółów. Oto pełna realizacja,
Dodaj tę metodę do adaptera
@Override
public int getItemViewType(int position) {
return (position == myItems.size()) ? R.layout.button : R.layout.item;
}
będzie sprawdzić, czy aktualna pozycja jest obok ostatniej pozycji na liście, jeśli jest to zwróci wartość układ przycisków tej metodzie
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView;
if(viewType == R.layout.item){
itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
}
else {
itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.button, parent, false);
}
return new MyViewHolder(itemView);
}
Powyższe metody sprawdza, czy przekazany viewType
jest układ item
lub układ button
a następnie napełnia się na stanowisku occordingly i wysyła nadmuchanej widok z tym sposobem,
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
if(position == myItems.size()) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "Button Clicked", Toast.LENGTH_LONG).show();
}
});
}
else {
final String name = myItems.get(position);
holder.title.setText(name);
}
}
ta sprawdza, czy jesteśmy za ostatnim item
na liście, a jeśli mamy to Ustawia metodę do naszego przycisku onClick
. W przeciwnym razie tworzy się normalnie.
Musimy także zmienić metodę getItemCount
do tego
@Override
public int getItemCount() {
return myItems.size() + 1;
}
Ponieważ jesteśmy przechodząc przez wszystkie items
a następnie dodanie button
w końcu, + 1
jest nasz przycisk.
Wtedy wreszcie musimy dodać nasz pogląd do klasy
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public Button button;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
button = (Button) view.findViewById(R.id.bottom_button);
}
}
myViewHolder
Mam nadzieję, że to pomaga!
To naprawdę mi pomogło @Gary –
@Gary Czy musimy dodać nasz przycisk do tego samego układu xml R.id.title znajduje się wewnątrz? Jeśli tak, czy przycisk nie pojawi się za każdym razem, gdy układ zawierający tytuł zostanie narysowany, ponieważ zostaną one zadeklarowane w tym samym układzie? – Cody
@Cody Nie, przycisk i element powinny znajdować się w dwóch oddzielnych plikach xml. –
Jeśli nie jest przewijanie, to po prostu dodaj go do swojego xml. –
Widok RecyclerView jest tworzony dynamicznie. Próbowałem to, co powiedziałeś, i włożyłem przycisk tuż nad RecyclerView. I tak jest przewijanie. –
https://github.com/cymcsg/UltimateRecyclerView – Yogendra