Рубрики
Без рубрики

Как добавить заголовок в Recyclerview в Android

В этой статье мы попытаемся разработать модель, которую можно использовать для добавления элемента заголовка в recyclerview для приложений Android. С тегами android, java, новички.

В 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”