Simple Android RecyclerView example

前端 未结 11 1631
名媛妹妹
名媛妹妹 2020-11-22 02:03

I\'ve made a list of items a few times using Android\'s RecyclerView, but it is a rather complicated process. Going through one of the numerous tutorials online

11条回答
  •  天命终不由人
    2020-11-22 02:45

    Now you need 1 adapter for all RecyclerView

    • One adapter can be used in for all RecyclerView. So NO onBindViewHolder, No onCreateViewHolder handling.
    • No code for setting adapter from Java/Kotlin class. Check sample class.
    • You can set events and custom data for every list by using Binding Adapters.

    I show here setting two different RecyclerView by 1 adapter -

    activity_home.xml

    
    
    
        
    
            
    
            
    
            
    
            
    
        
    
        
    
            
    
            
    
        
    
    
    

    You can see I pass list, item layout id and click listener from layout.

    rvItemLayout="@{@layout/row_one}"
    rvList="@{listOne}"
    rvOnItemClick="@{onItemClickListenerOne}"
    

    This custom attributes are created by BindingAdapter.

    public class BindingAdapters {
        @BindingAdapter(value = {"rvItemLayout", "rvList", "rvOnItemClick"}, requireAll = false)
        public static void setRvAdapter(RecyclerView recyclerView, int rvItemLayout, List rvList, @Nullable OnItemClickListener onItemClickListener) {
            if (rvItemLayout != 0 && rvList != null && rvList.size() > 0)
                recyclerView.setAdapter(new GeneralAdapter(rvItemLayout, rvList, onItemClickListener));
        }
    }
    

    Now from Activity, you pass list, click listener like

    HomeActivity.java

    public class HomeActivity extends AppCompatActivity {
        ActivityHomeBinding binding;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            binding = DataBindingUtil.setContentView(this, R.layout.activity_home);
            binding.setListOne(new ArrayList()); // pass your list or set list from response of API
            binding.setListTwo(new ArrayList());
            binding.setOnItemClickListenerOne(new OnItemClickListener() {
                @Override
                public void onItemClick(View view, Object object) {
                    if (object instanceof ModelParent) {
                        // TODO: your action here
                    }
                }
            });
            binding.setOnItemClickListenerTwo(new OnItemClickListener() {
                @Override
                public void onItemClick(View view, Object object) {
                    if (object instanceof ModelChild) {
                        // TODO: your action here  
                    }
                }
            });
        }
    }
    

    You don't want read too much, directly clone/download full example on from my github repo. And try it yourself.

    You can see GeneralAdapter.java in above repo.

    If you have problems while setting up data binding, please see this answer.

提交回复
热议问题