Monday, 4 November 2019

Create Simple Recycler View Grid View or List Grid View in Android or Recycler View Grid View using Adapter and XML row item layout and Data from Web Services or Web API

Simple RecyclerView with Grid View in Android for show simple listing with Grid View into Android  App. If you are first time create simple listing with Grid View screen than this example is best for you.


1. Step => Create simple Activity for example of simple RecyclerView with Grid View or listing with Grid View data. Create model class below.


package com.akhari.myapplication;

public class MovieModel {
    private String title, genre, year;

    public MovieModel(String title, String genre, String year) {
        this.title = title;
        this.genre = genre;
        this.year = year;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String name) {
        this.title = name;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

    public String getGenre() {
        return genre;
    }

    public void setGenre(String genre) {
        this.genre = genre;
    }
}



2. Step==> Create Simple adapter for set adapter of recycler View.

With arrayList of MovieList Model class





package com.akhari.myapplication;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class MoviesListAdapter  extends 

RecyclerView.Adapter<MoviesListAdapter.MyViewHolder> {
    private ArrayList<MovieModel> modelArrayList;
    private Context mContext;

    public MoviesListAdapter(ArrayList<MovieModel> modelArrayList,

Context mContext) {
        this.modelArrayList = modelArrayList;
        this.mContext = mContext;
    }

    @Override    

    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_row, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override

    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        MovieModel movie = modelArrayList.get(position);
        holder.title.setText(movie.getTitle());
        holder.genre.setText(movie.getGenre());
        holder.year.setText(movie.getYear());
    }

    @Override    public int getItemCount() {
        return modelArrayList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView title, year, genre;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
            genre = itemView.findViewById(R.id.genre);
            year = itemView.findViewById(R.id.year);
        }
    }
}




3. ==> Create Simple XML layout file for recycler view row layout.

      Name of layout file list_row.xml



<?xml version="1.0" encoding="utf-8"?>

 <RelativeLayout 

    xmlns:android="http://schemas.android.com/apk/res/android"    

    android:layout_width="match_parent"    

    android:layout_height="wrap_content"

    android:background="?android:attr/selectableItemBackground"

    android:clickable="true"

    android:focusable="true"    

    android:orientation="vertical"    

    android:paddingBottom="@dimen/row_padding_vertical"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/row_padding_vertical">

    <TextView        

       android:id="@+id/title"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:layout_alignParentTop="true"

       android:textColor="@color/title"        

       android:textSize="16dp"

       android:textStyle="bold" />

    <TextView

       android:id="@+id/genre"        

       android:layout_width="match_parent"        

       android:layout_height="wrap_content"

       android:layout_below="@id/title" />

    <TextView        

       android:id="@+id/year"        

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"        

       android:layout_alignParentRight="true"

       android:textColor="@color/year" />

</RelativeLayout>



4. ==> Create MainActivity file for recycler view show Movie list with title,

           subtitle, and year. Using Web API or web services and set data on list

package com.akhari.myapplication;


import android.app.ProgressDialog;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Toast;


import androidx.recyclerview.widget.DefaultItemAnimator;

import androidx.recyclerview.widget.LinearLayoutManager;

import androidx.recyclerview.widget.RecyclerView;


import com.akhari.myapplication.AppGlobals;

import com.akhari.myapplication.R;

import com.akhari.myapplication.adapter.NewsListAdapter;

import com.akhari.myapplication.database.DeoliLiveDatabase;

import com.akhari.myapplication.interactor.InteractorImpl;

import com.akhari.myapplication.interactor.ResponsePacket;

import com.akhari.myapplication.interfaces.IntegratorConst;

import com.akhari.myapplication.interfaces.OnResponseListener;

import com.akhari.myapplication.model.NewsInfo;

import com.google.gson.JsonObject;


import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    ProgressDialog progress;

    private ArrayList<MovieModel> movieList = new ArrayList<>();

    private RecyclerView recyclerView;

    private MoviesListAdapter mMoviesListAdapter;


    @Override

    public View onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        progress=new ProgressDialog(getActivity());


        recyclerView = findViewById(R.id.recycler_view);


        mMoviesListAdapter = new MoviesListAdapter(movieList,this);

      
        recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
    //numberOfColumns--> Number of Columns for recyclerview or list

        recyclerView.setItemAnimator(new DefaultItemAnimator());

        recyclerView.setAdapter(mMoviesListAdapter);

        prepareMovieList();

    }


    private void prepareMovieList() {


    if(AppGlobals.getInstance().isOnline(getActivity())) {

            getList(true);

        }

    }


    public void getList(boolean isShowProgress){

        if(isShowProgress){

            progress.setMessage("Loading");

            progress.setProgressStyle(ProgressDialog.THEME_DEVICE_DEFAULT_LIGHT);

            progress.setIndeterminate(true);

            progress.setCancelable(false);

            progress.show();

        }

        try {

            JsonObject jsonObject = new JsonObject();

            new InteractorImpl(getActivity(), this, IntegratorConst.Code_URL,

        IntegratorConst.Tag_URL)

                    .makeJsonPostRequest(IntegratorConst.Method_URL, jsonObject, false);


        }catch (Exception ex){

            ex.printStackTrace();

        }

    }


    @Override

    public void onSuccess(int requestCode, ResponsePacket responsePacket) {

        if(progress!=null && progress.isShowing()){

            progress.dismiss();

        }

        try {

             if(IntegratorConst.Code_DeoliWall==requestCode){

                if(responsePacket.getErrorCode()==0){

                    liveDatabase.deleteDeoliWalls();

                    for(int i=0;i<responsePacket.getValues().

                getMovieModelInfo().size();i++) {

            MovieModel movie = new MovieModel(

                responsePacket.getValues().

                getMovieModelInfo().get(i).getTitle(),

                               responsePacket.getValues().

                getMovieModelInfo().get(i).getDescription(),

               responsePacket.getValues().getMovieModelInfo().get(i).getYear());

                   movieList.add(movie);

                    }

        mMoviesListAdapter.notifyDataSetChanged();

                }

            }

        }catch (NullPointerException nxe){

            nxe.printStackTrace();

        }

    }


    @Override

    public void onError(int requestCode) {

        if(progress!=null && progress.isShowing()){

            progress.dismiss();

        }

        Toast.makeText(getActivity(),"Please check your internet or please try again",

    Toast.LENGTH_SHORT).show();

    }


    @Override

    public void onDestroy() {

        super.onDestroy();

    }

}

No comments:

Post a Comment