Create RecyclerView in Android

1 Step XML create

//--------------------------------------------Code Detail and Working---------------------------------------------------------




//============================java Code Start =========================================

2 Step Show Recycerview in XLM  page tag

//--------------------------------------------Code Detail and Working---------------------------------------------------------

<androidx.recyclerview.widget.RecyclerView
    
android:layout_width="match_parent"
   
android:layout_height="wrap_content"
   
android:id="@+id/Recycerview_admin_home"/>

//============================java Code Start =========================================

3 Step create Recycerview Adapter

//--------------------------------------------Code Detail and Working---------------------------------------------------------

public class AdminHomeAdapter extends RecyclerView.Adapter<AdminHomeAdapter.AdminHomeViewHolder>{

   
class AdminHomeViewHolder extends RecyclerView.ViewHolder {
        AdminHomeVenueCellBinding
binding;//<----
       
public AdminHomeViewHolder(
               
@NonNull AdminHomeVenueCellBinding itemView) {
           
super(itemView.getRoot());
           
binding = itemView;//<----
       
}
    }
}

=========================================================================

=========================================================================













=========================================================================

private ArrayList<Venue> VenueList;
private
Context context;

public
AdminHomeAdapter(ArrayList<Venue> VenueList, Context context) {
   
this.VenueList = VenueList;
    this
.context = context;

}

=========================================================================

AdminHomeVenueCellBinding b  =AdminHomeVenueCellBinding.
        inflate(LayoutInflater
                        .from(parent.getContext())
,
               
parent, false);

AdminHomeViewHolder vh = new AdminHomeViewHolder(b);
return
vh;














=========================================================================

Venue obj = VenueList.get(position);
holder.binding.textViewVenue1.setText(obj.getNAME()+"");
holder.binding.textViewVenue2.setText(obj.getNAME()+"");



=========================================================================

return VenueList.size();


//============================java Code Start =========================================

4 Step calling Adapter

//--------------------------------------------Code Detail and Working---------------------------------------------------------

ArrayList<Venue> data = new ArrayList<Venue>();

data.add(new Venue(1,"Lab 1"));
data.add(new Venue(1,"Lab 2"));
data.add(new Venue(1,"Lab 3"));
AdminHomeAdapter adapter = new
       
AdminHomeAdapter(data, getActivity());
Binding.RecycerviewAdminHome.
        setAdapter(adapter)
;

=========================fragment working code==================================

 

ArrayList<MEYE_USER> data = new ArrayList<MEYE_USER>();

data.add(new MEYE_USER());
data.get(0).setNAME("Ali");
data.add(new MEYE_USER());
data.get(1).setNAME("Zahid");

 

AdminHomeAdapter adapter = new
        
AdminHomeAdapter(data, getActivity());
 
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
Binding.RecycerviewAdminHome.setLayoutManager(manager);
 
Binding.RecycerviewAdminHome.setHasFixedSize(true);
 
Binding.RecycerviewAdminHome.
         setAdapter(adapter)
;

//============================java Code Start =========================================

=================Information---------------------------------------------------------------------

//============================java Code Start =========================================
Recycler view create One Row Multiple Horizontal use bind function

---------------------------xml recyclerview cell code add -------------------------------------

<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lineraLayout">

</LinearLayout>

//--------------------------------------------Code Detail and Working---------------------------------------------------------

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

holder.bind(position);
} 

=======================================Recyclerview========================

public class ViewHolder extends RecyclerView.ViewHolder {
       
public TextView cameraName;
        public
SurfaceView cameraSurfaceView;

       
LinearLayout linearLayout;
       
TextView textView ;
        public
ViewHolder(View view) {
            
super(view);
         
//  cameraName = view.findViewById(R.id.camera_name);
           
cameraSurfaceView = view.findViewById(R.id.camera_surface_view);
           
textView = view.findViewById(R.id.text_view);
           
linearLayout=view.findViewById(R.id.lineraLayout);

       
}

       
public void bind(int position) {
           
linearLayout.removeAllViews();
            for
(int i = 1; i <= 5 + 1; i++) {
                EditText editText =
new EditText(itemView.getContext());
               
editText.setLayoutParams(new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.
WRAP_CONTENT,
                       
LinearLayout.LayoutParams.WRAP_CONTENT));
               
editText.setHint("EditText " + i);
               
editText.addTextChangedListener(new TextWatcher() {
                   
@Override
                   
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                    }

                   
@Override
                    
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                        Toast.makeText(
itemView.getContext(), "EditText "  +charSequence, Toast.LENGTH_SHORT).show();
                   
}

                   
@Override
                    
public void afterTextChanged(Editable editable) {
                     
//  Toast.makeText(itemView.getContext(), "EditText "  +editable, Toast.LENGTH_SHORT).show();
                   
}
                })
;
//                editText.setOnClickListener(new View.OnClickListener() {
//                    @Override
//                    public void onClick(View v) {
//                        Toast.makeText(itemView.getContext(), "EditText "  +, Toast.LENGTH_SHORT).show();
//                    }
//                });
               
linearLayout.addView(editText);
           
}
        }
    }

 

//============================java Code Start =========================================
Recycler view Cell space manage with java code

//--------------------------------------------Code Detail and Working---------------------------------------------------------

@NonNull

    @Override

    public viewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view= LayoutInflater.from(context).inflate(R.layout.category_cell,parent,false);

        ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();

        layoutParams.setMargins(-15, -6, -98, 0); // Set margin to 8dp or your desired value

        view.setLayoutParams(layoutParams);

 

        return new viewHolder(view);

    }

//============================java Code Start =========================================

Create RecyclerView main Logic FreeSlot  in android


Code RecyclerView

ArrayList<String> uniqueStartTimes= new ArrayList<>();
ArrayList<String> uniqueEndTimes= new ArrayList<>();
ArrayList<String> uniqueDays= new ArrayList<>();
ArrayList<String> uniqueVenue= new ArrayList<>();
ArrayList<HashMap<String, ArrayList<String>>> venueMap = new ArrayList<>();
Spinner[][] allSpinners = new Spinner[uniqueDays.size()][uniqueDays.size()];
//calling rows show 
@Override
public void onBindViewHolder(@NonNull AdminScheduleFreeSlotViewHolder holder, int position) {
if(position==0){
holder.bindDays(position);
}
holder.bind(position);
String obj = uniqueStartTimes.get(position);
}

    class AdminScheduleFreeSlotViewHolder extends RecyclerView.ViewHolder {
RecyclerviewRescheduleFreeSlotCellBinding binding;//<----

public AdminScheduleFreeSlotViewHolder(
@NonNull RecyclerviewRescheduleFreeSlotCellBinding itemView) {
super(itemView.getRoot());
binding = itemView;//<----
}
//create column in row
public void bind(int RowPosition) {
binding.linearLayoutFreeSlot.removeAllViews();
TextView textView = new TextView(context);
// Set the text
textView.setText(uniqueStartTimes.get(RowPosition)+"\n"+uniqueEndTimes.get(RowPosition));
// Set the width and height
int width = ViewGroup.LayoutParams.WRAP_CONTENT;; // in pixels
int height =150;
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(width, height);
textView.setLayoutParams(layoutParams);
// Set the gravity and layout gravity
textView.setGravity(Gravity.CENTER);
binding.linearLayoutFreeSlot.addView(textView);
//create Spinner
Spinner[] spinners = new Spinner[uniqueDays.size()];
String[][] items = new String[uniqueDays.size()][];

for (int i = 0; i < spinners.length; i++) {
TableRow.LayoutParams params = new TableRow.LayoutParams(
220,
TableRow.LayoutParams.MATCH_PARENT, 1f);
params.gravity = Gravity.RIGHT;
// Create Spinners for each TableRow
Spinner spinner = new Spinner(context);
spinner.setLayoutParams(params);
// unique venue
List<String> timeTables1= new ArrayList<>();
final int finalvalue=i;
timeTables1.add("");
timeTables1.addAll(uniqueVenue);
for (TimeTable t :TimeTableList){
if (t.getStarttime().toString().equals(uniqueStartTimes.get(RowPosition)) ) {
if (t.getDay().equals(uniqueDays.get(finalvalue))) {
if(timeTables1.equals(t.getVenue()));
timeTables1.remove(t.getVenue());

}
}
}
// use linq i
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// timeTables1 = uniqueVenue.stream()
// .filter(venue -> TimeTableList.stream()
// .noneMatch(t -> t.getStarttime().equals(uniqueStartTimes.get(RowPosition))
// && t.getDay().equals(uniqueDays.get(finalvalue))
// && t.getVenue().equals(venue)))
// .collect(Collectors.toList());
// }

items[i] = timeTables1.toArray(new String[0]);

// items[i] = new String[]{"", "Spinner " + i + " Item 1", "Spinner " + i + " Item 2", "Spinner " + i + " Item 3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(itemView.getContext(), android.R.layout.simple_spinner_dropdown_item, items[i]);
// adapter.setDropDownViewResource(R.layout.spinner_layout_timetable);
spinner.setAdapter(adapter);
final int finalI = i;
// Drawable drawable = ContextCompat.getDrawable(itemView.getContext(), R.drawable.teacher_recyclerview_background_cell);
// spinner.setBackground(drawable);
// spinner.setBackgroundResource(R.drawable.teacher_recyclerview_background_cell);
spinners[i] = spinner;

allSpinners[RowPosition][i] = spinner; // Store the spinner in the array
Spinner emptySpinner = spinners[i];
emptySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
AdminScheduleReScheduleFreeSlotActivity reschedule= (AdminScheduleReScheduleFreeSlotActivity) context;
reschedule.recyclerviewSelectVenueDrowpdown(emptySpinner.getSelectedItem().toString(),context );
if (position != 0) {
// Disable all other spinners
for (int row = 0; row < allSpinners.length; row++) {
for (int col = 0; col < allSpinners[row].length; col++) {
Spinner spinner = allSpinners[row][col];
if (spinner != null && spinner.getSelectedItem().toString().equals("")) {
// Disable empty spinner
spinner.setEnabled(false);
} else if (row != RowPosition || col != finalI) {
// Disable non-selected spinners
spinner.setEnabled(false);
} else {
// Enable selected spinner
spinner.setEnabled(true);
}
}
}

Toast.makeText(context, "" + emptySpinner.getSelectedItem().toString(), Toast.LENGTH_SHORT).show();
} else {
// Enable all spinners
for (int row = 0; row < allSpinners.length; row++) {
for (int col = 0; col < allSpinners[row].length; col++) {
Spinner spinner = allSpinners[row][col];
if (spinner != null) {
spinner.setEnabled(true);
}
}
}
}
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
binding.linearLayoutFreeSlot.addView(spinner);

}
}

//create end

public void bindDays(int position) {
binding.linearLayoutDayOfName.removeAllViews();
TextView textViewFirst = new TextView(itemView.getContext());
textViewFirst.setLayoutParams(new LinearLayout.LayoutParams(
120,
140,1f));

// Set the gravity and layout gravity
textViewFirst .setGravity(Gravity.CENTER);
binding.linearLayoutDayOfName.addView(textViewFirst);
for (int i = 0; i < uniqueDays.size(); i++) {
TextView textView = new TextView(itemView.getContext());
textView.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
100,1f));
textView.setBackgroundResource(R.drawable.teacher_recyclerview_background_cell);
textView.setTypeface(null, Typeface.BOLD);
textView .setGravity(Gravity.CENTER);
textView.setText(uniqueDays.get(i));
binding.linearLayoutDayOfName.addView(textView);
}
}


}


Create RecyclerView main Logic create cell  in android


Code RecyclerView

ArrayList<String> uniqueStartTimes= new ArrayList<>();
ArrayList<String> uniqueEndTimes= new ArrayList<>();
ArrayList<String> uniqueDays= new ArrayList<>();
ArrayList<TimeTable> TimeTableSchrduleList;
public AdminTimeTableScheduleAdapter(ArrayList<TimeTable> TimeTableList, Context context) {
this.TimeTableList = TimeTableList;
this.context = context;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {

uniqueStartTimes.addAll(TimeTableList.stream().distinct().map(t -> t.getStarttime()).distinct().collect(Collectors.toList()));
uniqueEndTimes.addAll(TimeTableList.stream().distinct().map(t -> t.getEndtime()).distinct().collect(Collectors.toList()));
uniqueDays.addAll(TimeTableList.stream().distinct().map(t -> t.getDay()).distinct().collect(Collectors.toList()));
}
}
@Override
public void onBindViewHolder(@NonNull AdminTimeTableScheduleViewHolder holder, int position) {
//row one only
if(position==0){
holder.bindDays(position);
}
String obj = uniqueStartTimes.get(position);
//multiple column create
holder.bind(position);
}

//show Rows 
class AdminTimeTableScheduleViewHolder extends RecyclerView.ViewHolder {
RecyclerviewTimetableScheduleCellBinding binding;//<----
public AdminTimeTableScheduleViewHolder(
@NonNull RecyclerviewTimetableScheduleCellBinding itemView) {
super(itemView.getRoot());
binding = itemView;//<----
}
// row one Day Name
public void bindDays(int position) {
binding.linearLayoutDayOfName.removeAllViews();

// Create the first TextView with a width of 0 and weight of 1 to distribute equal width
TextView textViewFirst = new TextView(itemView.getContext());
TableRow.LayoutParams firstParams = new TableRow.LayoutParams(
98, TableRow.LayoutParams.MATCH_PARENT);
textViewFirst.setLayoutParams(firstParams);
textViewFirst.setGravity(Gravity.CENTER);
binding.linearLayoutDayOfName.addView(textViewFirst);

// Create the remaining TextViews with equal width and a margin of 5dp between them
for (int i = 0; i < uniqueDays.size(); i++) {
TextView textView = new TextView(itemView.getContext());
TableRow.LayoutParams params = new TableRow.LayoutParams(
0, TableRow.LayoutParams.MATCH_PARENT, 1f);
// params.setMarginStart((int) itemView.getContext().getResources().getDimension(R.dimen.spacing_xxlarge));
textView.setLayoutParams(params);
textView.setBackgroundResource(R.drawable.teacher_recyclerview_background_cell);
textView.setTypeface(null, Typeface.BOLD);
textView.setGravity(Gravity.CENTER);
textView.setText(uniqueDays.get(i).substring(0, 3));
textView.setTextSize(18);
binding.linearLayoutDayOfName.addView(textView);
}
}
//end row of Days
// start Stat Time And End Time
public void bind(int RowPosition) {
binding.linearLayoutTimeTableSchedule.removeAllViews();
TextView textViewFirst = new TextView(context);
// Set the text
textViewFirst.setText(uniqueStartTimes.get(RowPosition)+"\n"+uniqueEndTimes.get(RowPosition));
// Set the width and height
int width = ViewGroup.LayoutParams.WRAP_CONTENT;; // in pixels
int height =200;
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(width, height);
textViewFirst.setLayoutParams(layoutParams);
/// Set the gravity and layout gravity
textViewFirst.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textViewFirst.setForegroundGravity(Gravity.CENTER);
}
// // Create a TableRow to contain the TextViews
// TableRow tableRow = new TableRow(itemView.getContext());
// tableRow.setLayoutParams(new ViewGroup.LayoutParams(
// ViewGroup.LayoutParams.MATCH_PARENT,
// ViewGroup.LayoutParams.WRAP_CONTENT));
binding.linearLayoutTimeTableSchedule.addView(textViewFirst);
for (int i = 0; i < uniqueDays.size(); i++) {
TableRow.LayoutParams params = new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
200, 1f);
params.gravity = Gravity.RIGHT;
TextView textView = new TextView(itemView.getContext());
textView.setLayoutParams(params);
textView.setTypeface(null, Typeface.BOLD);
textView .setGravity(Gravity.CENTER);

//enter TextView Data
for (TimeTable timeTable :TimeTableSchrduleList){
if (timeTable.getStarttime().toString().equals(uniqueStartTimes.get(RowPosition)) ) {
if (timeTable.getDay().equals(uniqueDays.get(i))) {
textView.setText(timeTable.getDiscipline()+"\n"+timeTable.getCourseName()+"\n"+timeTable.getVenue());
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, ""+textView.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
}

//end enter TextView Data
// Add a ScrollView to the parent layout
ScrollView scrollView = new ScrollView(itemView.getContext());
scrollView.setLayoutParams(params);
scrollView.setVerticalScrollBarEnabled(true);

// Add the TextView to the ScrollView
scrollView.addView(textView);
scrollView.setBackgroundResource(R.drawable.teacher_recyclerview_background_cell);
// tableRow.addView(scrollView);
// textView.setMovementMethod(new ScrollingMovementMethod());
binding.linearLayoutTimeTableSchedule.addView(scrollView);

// binding.linearLayoutTimeTableSchedule.addView(textView);
}
// binding.linearLayoutTimeTableSchedule.addView(tableRow);
}

// End start Stat Time And End Time
}

Create RecyclerView with code EditText And count Column value  main Logic create cell in android

Code RecyclerView

 EditText[][] allEditTexts = new EditText[5][7];
int[][] array= new int[5][5];
//calling Create column in Row
holder.bind(position);
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView cameraName;
public SurfaceView cameraSurfaceView;

LinearLayout linearLayout;
TextView textView ;
public ViewHolder(View view) {
super(view);
// cameraName = view.findViewById(R.id.camera_name);
cameraSurfaceView = view.findViewById(R.id.camera_surface_view);
textView = view.findViewById(R.id.text_view);
linearLayout=view.findViewById(R.id.lineraLayout);

}

public void bind(int position) {
linearLayout.removeAllViews();
TableRow tableRow = new TableRow(context);
tableRow.setLayoutParams(new TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT
));
for (int i = 0; i < 5; i++) {
TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(
0, TableRow.LayoutParams.WRAP_CONTENT, 1f);
EditText editText = new EditText(itemView.getContext());
editText.setLayoutParams(layoutParams);
editText.setHint("Text " + i);
int finalI = i;
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(charSequence.length()>0) {
try {

array[position][finalI] = Integer.parseInt(charSequence.toString());
int columnIndex = finalI; // specify the column index you want to count
int count = 0;
for (int CountIndex = 0; CountIndex < array.length; CountIndex++) {
count += array[CountIndex][columnIndex];
}
Toast.makeText(context, "" + count, Toast.LENGTH_SHORT).show();
System.out.println("The total count of column " + columnIndex + " is " + count);
} catch (NumberFormatException e) {
Toast.makeText(context, "Invalid input", Toast.LENGTH_SHORT).show();
}
}else
                            array[position][finalI] = 0;
                        }
//              Toast.makeText(itemView.getContext(), "EditText " +charSequence+"2D ["+position+"]["+col+"]", Toast.LENGTH_SHORT).show();
}

@Override
public void afterTextChanged(Editable editable) {


// Toast.makeText(itemView.getContext(), "EditText " +editable, Toast.LENGTH_SHORT).show();
}
});
tableRow.addView(editText);

allEditTexts[position][i] = editText; // Store the EditText in the array
}
linearLayout.addView(tableRow);
}


EditText Search Recycler View item Code 


 //recyclerview search code
Binding.editTextAdminViewSearch.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
// Toast.makeText(getContext(), ""+editable, Toast.LENGTH_SHORT).show();
ArrayList<MEYE_USER> filteredList = new ArrayList<>();
for (MEYE_USER item : data) {
if (item.getName().toLowerCase().contains(editable.toString().toLowerCase())) {
filteredList.add(item);
}
}
AdminViewTeacherAdapter adaptersearch = new
AdminViewTeacherAdapter(filteredList, getActivity(), ViewTeacherFragment.this,"ViewTeacherFragment");
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
Binding.RecycerviewAdminViewTeacher.setLayoutManager(manager);
// Binding.RecycerviewAdminViewTeacher.setHasFixedSize(true);
Binding.RecycerviewAdminViewTeacher.
setAdapter(adaptersearch);
// recyclerview function calling
// adapter.filterList(filteredList);
}
});

Notify the adapter that the data has changed to update the RecyclerView's

Recyclerview in java add code 

public void filterList(ArrayList<MEYE_USER> filteredList) {
TeacherList = filteredList;
notifyDataSetChanged();
}


Swapping Gesture Adapter code 

public static class SwipeMenuCallback extends ItemTouchHelper.SimpleCallback {

private AdminSettingDVRChannelAdapter adapter;

public SwipeMenuCallback(AdminSettingDVRChannelAdapter adapter) {
super(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT);
this.adapter = adapter;
}

@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}

@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int position = viewHolder.getAdapterPosition();
adapter.removeItem(position);
}

@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
// Get the swipe menu layout for the current item
View swipeMenuLayout = viewHolder.itemView.findViewById(R.id.rowBG);

// Adjust the swipe menu layout's position based on the swiping gesture
swipeMenuLayout.setTranslationX(dX);
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
}

adapter calling bind code

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new AdminSettingDVRChannelAdapter.SwipeMenuCallback(adapter));
itemTouchHelper.attachToRecyclerView(Binding.RecycerviewAdminSettingDVRChannel);


Post a Comment

0 Comments
* Please Don't Spam Here. All the Comments are Reviewed by Admin.