Recycler View Logics in detail
Full code of Recycler Adapter (Working Sample):
package app.nepaliapp.eps_practice_new;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import app.nepaliapp.eps_practice_new.data.questionlist;
public class RecyclerAdpaterfirstQuestion extends RecyclerView.Adapter<RecyclerAdpaterfirstQuestion.ViewHolder> {
Context context;
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.questionview,parent,false);
ViewHolder viewholder = new ViewHolder(view);
return viewholder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String text;
text = questionlist.get(position).question_number;
holder.change.setText(text);
}
@Override
public int getItemCount() {
return questionlist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import app.nepaliapp.eps_practice_new.data.questionlist;
public class RecyclerAdpaterfirstQuestion extends RecyclerView.Adapter<RecyclerAdpaterfirstQuestion.ViewHolder> {
Context context;
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.questionview,parent,false);
ViewHolder viewholder = new ViewHolder(view);
return viewholder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String text;
text = questionlist.get(position).question_number;
holder.change.setText(text);
}
@Override
public int getItemCount() {
return questionlist.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
}
Above codes works perfectly
extend your Adapter to RecyclerView.Adapter<AdapterName.ViewHolder>
Where ViewHolder Press Alt+Enter will create a class
Again come to that ViewHolder and it will give option to extend Viewholder class to extend to Recycler class
After tht Go to ViewHolder inner class and Implement the method by Alt + Enter
public class RecyclerAdpaterfirstQuestion extends RecyclerView.Adapter<RecyclerAdpaterfirstQuestion.ViewHolder> {
Context context;
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
Context context;
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
public class ViewHolder extends RecyclerView.ViewHolder {
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
Code will look like above given Code. But error will continue and just press ALT + Enter. And that will create
Oncreate,onBindViewHolder, getItemCount
On create code should Look like
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.questionview,parent,false);
ViewHolder viewholder = new ViewHolder(view);
return viewholder;
}
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.questionview,parent,false);
ViewHolder viewholder = new ViewHolder(view);
return viewholder;
}
Above code: R.layout........................(Name must be of the model that you have created for the RecyclerView that you have created)
onBindViewholder, This is what you want to show
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String text;
text = questionlist.get(position).question_number;
holder.change.setText(text);
}
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String text;
text = questionlist.get(position).question_number;
holder.change.setText(text);
}
On this method holder is given along with position. Which is used to make that possible and Change Written there is already defined in Viewholder class that you have made in beiging.
public class ViewHolder extends RecyclerView.ViewHolder {
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
Button change;
public ViewHolder(@NonNull View itemView) {
super(itemView);
change = (Button) itemView.findViewById(R.id.question_numbers);
}
}
Viewholder Class where Change it was explaned.
getItemCount, This is a function which give the size of the class
@Override
public int getItemCount() {
return questionlist.size();
}
Code sample is given as above/
All of the above class are @overrided as it is already function of Recycler.View
Let's Discuss about contructor that is made in this class:
Context context;
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
List<questionlist> questionlist = new ArrayList<questionlist>();
public RecyclerAdpaterfirstQuestion(Context context, List<questionlist> questionlist) {
this.context = context;
this.questionlist = questionlist;
}
You must have Array form which you want to show and Don't worry, That Arrraylist was assigned from call Class. Like this:
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import app.nepaliapp.eps_practice_new.data.questionlist;
public class MainActivity extends AppCompatActivity {
private List<questionlist> questions = new ArrayList<questionlist>();
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.list_view);
//Question list
recyclerView.setLayoutManager(new GridLayoutManager(this,3));
RecyclerAdpaterfirstQuestion adapter = new RecyclerAdpaterfirstQuestion(this, questions);
recyclerView.setAdapter(adapter);
}
}
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
import app.nepaliapp.eps_practice_new.data.questionlist;
public class MainActivity extends AppCompatActivity {
private List<questionlist> questions = new ArrayList<questionlist>();
private RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.list_view);
//Question list
recyclerView.setLayoutManager(new GridLayoutManager(this,3));
RecyclerAdpaterfirstQuestion adapter = new RecyclerAdpaterfirstQuestion(this, questions);
recyclerView.setAdapter(adapter);
}
}
Comments
Post a Comment