В Android Recyclerview – это продвинутая, гибкая и обновленная версия Listview и Gridview. Он быстро становится одним из наиболее часто используемых компонентов в приложениях для Android. Он использует меньше памяти для перечисления большого количества наборов данных и коллекций. Кроме того, это обеспечивает пользователю лучший опыт.
Я искал готовую модель, чтобы добавить элемент заголовка в recyclerview, но я не смог найти что-то, что было бы кратким и понятным. В этом блоге мы попытаемся разработать модель, которую можно использовать для добавления элемента заголовка в recyclerview для приложений Android.
Взгляните на скриншоты ниже, чтобы получить представление о том, чего мы пытаемся достичь в этом руководстве.
Смещенный вывод viewitem
Фактический Результат
Давайте начнем.
1. Добавление библиотеки поддержки
Вам необходимо добавить следующие библиотеки поддержки в gradle (Module.app), чтобы Recyclerview работал в вашем проекте.
implementation 'com.android.support:recyclerview-v7:28.0.0'
2. Создание Recyclerview
Используйте экземпляр Recyclerview listview для улучшения работы, и определить его в xml довольно просто. Вы можете определить его в xml следующим образом..
activity_main.xml
3. Создайте два разных макета для заголовка и макета элемента просмотра
Здесь мы создаем два xml-макета, один для элемента заголовка, а другой для viewitem.
Headerview содержит компоненты пользовательского интерфейса, необходимые для отображения в элементе заголовка.
Ваш код для xml элемента заголовка должен быть похож на приведенный ниже,
activity_headeritem.xml
Подобно представлению заголовка, элементы Listview содержат компоненты пользовательского интерфейса для элементов представления.
Я прикрепил xml-код для элемента Listview ниже,
activity_listviewitem.xml
4. CustomAdapterclass.java
Мы добились добавления элемента заголовка в recyclerview с помощью свойства viewtype. Итак, теперь мы создадим пользовательский адаптер для Recyclerview. В методе onCreateViewHolder
мы должны использовать два метода inflate, которые помогут вам определить ваш layout.xml . Вы должны расширить свой адаптер с помощью ” RecyclerView. Адаптер “, который следует за свойством viewtype.
CustomAdapter.java
public class CustomAdapter extends RecyclerView.Adapter{ private static final int TYPE_HEADER = 0; private static final int TYPE_ITEM = 1; private List viewitemlists; private Context context; public CustomAdapter(Context context, List viewitemlists) { this.context = context; this.viewitemlists = viewitemlists; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_ITEM) { // Here Inflating your recyclerview item layout View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_listviewitem, parent, false); return new ItemViewHolder(itemView); } else if (viewType == TYPE_HEADER) { // Here Inflating your header view View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_headeritem, parent, false); return new HeaderViewHolder(itemView); } else return null; } @Override public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { if (holder instanceof HeaderViewHolder){ setheadersdata_flag = true; HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; // You have to set your header items values with the help of model class and you can modify as per your needs headerViewHolder.txt_needsreview.setText("YOUR _HEADERVIEW_STRING"); } else if (holder instanceof ItemViewHolder){ final ItemViewHolder itemViewHolder = (ItemViewHolder) holder; // Following code give a row of header and decrease the one position from listview items final LatestTabModel.ViewItemsModel data = latestlists.get(position-1); // You have to set your listview items values with the help of model class and you can modify as per your needs itemViewHolder.title.setText(data.getTitle()); } } @Override public int getItemViewType(int position) { if (position == 0) { return TYPE_HEADER; } return TYPE_ITEM; } // getItemCount increasing the position to 1. This will be the row of header @Override public int getItemCount() { return latestlists.size()+1; } private class HeaderViewHolder extends RecyclerView.ViewHolder { TextView txt_needsreview,txt_planned,txt_inprogress,txt_completed; public HeaderViewHolder(View view) { super(view); txt_needsreview = (TextView) view.findViewById(R.id.review_needs_count_text); txt_planned = (TextView) view.findViewById(R.id.planned_requests_count_text); txt_inprogress = (TextView) view.findViewById(R.id.inprogress_count_text); txt_completed = (TextView) view.findViewById(R.id.completed_count_text); } } public class ItemViewHolder extends RecyclerView.ViewHolder { TextView title,description,upward_count,comment_count,status; LinearLayout latest_feed_layout; LikeButton upvote_image; public ItemViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.latest_tab_title_text); description = (TextView) itemView.findViewById(R.id.latest_tab_descrip_text); upward_count = (TextView) itemView.findViewById(R.id.count_upward_text); comment_count = (TextView) itemView.findViewById(R.id.comment_count_text); status = (TextView) itemView.findViewById(R.id.latest_tab_status_text); latest_feed_layout = (LinearLayout) itemView.findViewById(R.id.latest_feed_layout); upvote_image = (LikeButton) itemView.findViewById(R.id.upward_image); } } }
getItemViewType() предоставляет свойство viewtype для Recyclerview, которое помогает при прокрутке Recyclerview.
getItemCount() увеличивает позицию элемента списка на единицу (listitem + 1). Он предоставляет строку под заголовком.
5. MainActivity.java
В этом классе мы должны передать класс адаптера Recyclerview для завершения функции прокрутки. Наконец, мы достигаем полной функции Recyclerview с представлением заголовка.
MainActivity.java
public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; LinearLayoutManager linearLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView)findViewById(R.id.my_recycler_view); linearLayoutManager = new LinearLayoutManager(this); MyRecyclerAdapter adapter = new MyRecyclerAdapter(getActivity(), getListViewItems()); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setAdapter(adapter); } }
Это подводит нас к концу этого урока. Я надеюсь, что вы узнали, как создать recyclerview для вашего приложения для Android. Теперь вы можете запустить это на своем Android-устройстве и сами увидеть результат. Этот результат, похоже, именно то, что вы хотите.
Оригинал: “https://dev.to/gopigk/how-to-add-header-to-recyclerview-in-android-5cl1”