-2

Recently i learn how user github api but something i curious about , how can i make endless scrolling in recycler view

here my mainActivity.kt

class MainActivity : AppCompatActivity()
{
    private lateinit var binding: ActivityMainBinding
    private lateinit var viewModel :MainViewModel
    private lateinit var adapter: userAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        adapter = userAdapter()
        adapter.notifyDataSetChanged()
        viewModel = ViewModelProvider(this,ViewModelProvider.NewInstanceFactory()).get(MainViewModel::class.java)
        binding.apply {
            recyclerview.layoutManager = LinearLayoutManager(this@MainActivity)
            recyclerview.setHasFixedSize(false)
            recyclerview.adapter = adapter

            btnSearch.setOnClickListener {
            searchUsers()
            }
                etQuery.setOnKeyListener { v, keyCode, event ->
                    if (event.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER){
                        searchUsers()
                        return@setOnKeyListener true
                    }
                    return@setOnKeyListener false
                }
        }
    }
    private fun searchUsers(){
        binding.apply {
            val query = etQuery.text.toString()
            if(query.isEmpty()) return
            viewModel.setSearchUsers(query)
        }
        viewModel.getSearchUsers().observe(this,{
            if (it!=null){
                adapter.setList(it)

            }
        })
    }
}

Adapter.kt

here is my adapter, i have tried to change like function still doesnt work

// class userAdapter : RecyclerView.Adapter<userAdapter.UserViewHolder>() { private val list = ArrayList()

    fun setList(user: ArrayList<user>){
        list.clear()
        list.addAll(user)
        notifyDataSetChanged()
    }
    inner class UserViewHolder(val binding: UserItemListBinding) : RecyclerView.ViewHolder(binding.root){
        fun bind(user: user){
            binding.apply {

                Glide.with(itemView)
                    .load(user.avatar_url)
                    .transition(DrawableTransitionOptions.withCrossFade())
                    .centerCrop()
                    .into(userpropic)
                username.text = user.login
            }

        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
        val view = UserItemListBinding.inflate(LayoutInflater.from(parent.context),parent,false)
        return UserViewHolder((view))
    }

    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        holder.bind(list[position])
    }

    override fun getItemCount(): Int = list.size
    }

Adapter.kt

here is my adapter, i have tried to change like function still doesnt work

Agam
  • 23
  • 9
  • Does this answer your question? [How to implement endless list with RecyclerView?](https://stackoverflow.com/questions/26543131/how-to-implement-endless-list-with-recyclerview) – Sujal Kumar Jan 07 '22 at 12:33
  • i tried , but i not working , because i'm new to kotlin , maybe u can help me sir, – Agam Jan 07 '22 at 14:00

1 Answers1

0
    boolean loading = true;
    int pastItemsVisible, visibleItemCount, totalItemCount;

    mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            if (dy > 0) { //check for scroll down
                visibleItemCount = mLayoutManager.getChildCount();
                totalItemCount = mLayoutManager.getItemCount();
                pastItemsVisible = mLayoutManager.findFirstVisibleItemPosition();

                if (loading) {
                    if ((visibleItemCount + pastItemsVisible) >= totalItemCount) {
                        loading = false;
                        
                        Log.v("...", "Last Item !");
                        
                        // Do pagination.. i.e. fetch new data

                        loading = true;
                    }
                }
            }
        }
    });
Pratik Fagadiya
  • 1,195
  • 7
  • 21