অ্যান্ড্রয়েড স্টুডিও সাহায্যে,কিভাবে রিসাইকেল ভিউ তৈরি করবেন। রিসাইকেল ভিউ তে, কিভাবে জসন ফাইল ডাটা শো করানো হয়। জেসন ফাইল ওয়েবসাইটে আপলোড করে। কিভাবে লিংক করানো হয়। ডাটা কিভাবে অ্যান্ড্রয়েড অ্যাপ এ সো করে।
এই পোস্ট দেখলে সম্পূর্ণ বুঝতে পারবেন শিখতে পারবেন। প্রয়োজন হলে, আমাদের চ্যানেলে ঘুরে দেখতে পারেন। ফুল টিউটোরিয়াল কোর্স ফ্রী, পাবলিশ করা হয়েছে। Link Here
প্রথমে android-studio সফটওয়্যার ডাউনলোড করুন। সাকসেসফুলি কনফিগার করুন। নতুন একটি প্রজেক্ট তৈরি করুন। তারপর স্টেপ গুলো ফলো করে খুব সহজেই প্রোগ্রাম গুলি লিখুন।
01 Step ( Add Library For Dependencies) build.gradle
implementation "androidx.recyclerview:recyclerview:1.2.1"implementation "androidx.cardview:cardview:1.0.0"implementation 'com.squareup.retrofit2:retrofit:2.3.0'implementation 'com.squareup.retrofit2:converter-gson:2.3.0'implementation 'com.squareup.picasso:picasso:2.71828'
02 Step ( Internet Permission ) \app\src\main\AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itechbangla.myapplication"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MyApplication"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
03 Step ( Create Drawable File ) \app\src\main\res\drawable\page_border.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#FFFFFF" /> <stroke android:width="1dp" android:color="#CCCCCC" /></shape>
04 Step ( Create Layout File )\app\src\main\res\layout\item_layout.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="@drawable/page_border" android:layout_margin="8dp"> <ImageView android:id="@+id/car_img" android:layout_width="150dp" android:layout_height="90dp" android:padding="5dp" android:scaleType="fitStart" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@+id/car_img" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/car_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/car_desc" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout></RelativeLayout>
05 Step (Create a Java Class View ) \app\src\main\java\com\example\app\Data_Constructor.java
import com.google.gson.annotations.Expose;import com.google.gson.annotations.SerializedName;public class Data_Constructor { @SerializedName("id") @Expose private String id; @SerializedName("name") @Expose private String name; @SerializedName("desc") @Expose private String desc; @SerializedName("image") @Expose private String image; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public String getImage() { return image; } public void setImage(String image) { this.image = image; }}
06 Step (Create a Java Class View ) \app\src\main\java\com\example\app\DataAdapter.java
import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Filter;import android.widget.Filterable;import android.widget.ImageView;import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import com.squareup.picasso.Picasso;import java.util.ArrayList;public class DataAdapter extends RecyclerView.Adapter<DataAdapter.ViewHolder> implements Filterable { private ArrayList<Data_Constructor> articles=new ArrayList<>(); private ArrayList<Data_Constructor> mArrayList=new ArrayList<>(); private Context context; public DataAdapter(ArrayList<Data_Constructor> articles, Context context) { this.context=context; this.articles=articles; this.mArrayList=articles; } @Override public DataAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_layout, viewGroup, false); return new ViewHolder(view); } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence charSequence) { String charString = charSequence.toString(); if (charString.isEmpty()) { articles = mArrayList; } else { ArrayList<Data_Constructor> filteredList = new ArrayList<>(); for (Data_Constructor CarItem : mArrayList) { if (CarItem.getName().toLowerCase().contains(charString)) { filteredList.add(CarItem); } } articles = filteredList; } FilterResults filterResults = new FilterResults(); filterResults.values = articles; return filterResults; } @Override protected void publishResults(CharSequence charSequence, FilterResults filterResults) { articles = (ArrayList<Data_Constructor>) filterResults.values; notifyDataSetChanged(); } }; } @Override public void onBindViewHolder(DataAdapter.ViewHolder viewHolder, final int i) { final String car_name=articles.get(i).getName(); final String car_desc=articles.get(i).getDesc(); viewHolder.car_name.setText(car_name); viewHolder.car_desc.setText(car_desc); Picasso.get().load(articles.get(i).getImage()).resize(60,60).into(viewHolder.car_img); } @Override public int getItemCount() { return articles.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ private TextView car_name,car_desc; private ImageView car_img; public ViewHolder(View view) { super(view); car_name = (TextView)view.findViewById(R.id.car_name); car_desc = (TextView)view.findViewById(R.id.car_desc); car_img = (ImageView)view.findViewById(R.id.car_img); } }}
07 Step (Create a Java Class View ) \app\src\main\java\com\example\app\http.java
import java.util.List;import retrofit2.Call;import retrofit2.http.GET;interface http { @GET("cars_list.json") Call<List<Data_Constructor>> getJson();}
08 Step ( Main Layout File )\app\src\main\res\layout\activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/cars_list" tools:listitem="@layout/item_layout" android:layout_width="match_parent" android:layout_height="wrap_content"/> <ProgressBar android:id="@+id/progress_bar" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
09 Step (Main View Activity ) \app\src\main\java\com\example\app\MainActivity.java
import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;import android.view.View;import android.widget.ProgressBar;import android.widget.Toast;import java.util.ArrayList;import java.util.List;import retrofit2.Call;import retrofit2.Callback;import retrofit2.Response;import retrofit2.Retrofit;import retrofit2.converter.gson.GsonConverterFactory;public class MainActivity extends AppCompatActivity { private DataAdapter dataAdapter; private ArrayList<Data_Constructor> CarItems=new ArrayList<>(); private RecyclerView mRecyclerView; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //// Progress Bar Initialize mProgressBar=(ProgressBar)findViewById(R.id.progress_bar); //// Recycler View Initialize mRecyclerView=(RecyclerView)findViewById(R.id.cars_list); //// Layout Manager View Initialize mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); parseJson(); } //// parse Json File Data Website Call private void parseJson() { Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://gist.githubusercontent.com/Navneet7k/c6ea0b944dd9e688386e99658f4168b8/raw/7decf7aad83f2e1c1107eff869a13f59bd840740/") .addConverterFactory(GsonConverterFactory.create()) .build(); http request = retrofit.create(http.class); Call<List<Data_Constructor>> call1=request.getJson(); call1.enqueue(new Callback<List<Data_Constructor>>() { @Override public void onResponse(Call<List<Data_Constructor>> call, Response<List<Data_Constructor>> response) { mProgressBar.setVisibility(View.GONE); if (response.isSuccessful() && response.body()!=null) { CarItems = new ArrayList<>(response.body()); dataAdapter=new DataAdapter(CarItems,MainActivity.this); mRecyclerView.setAdapter(dataAdapter); } } @Override public void onFailure(Call<List<Data_Constructor>> call, Throwable t) { mProgressBar.setVisibility(View.VISIBLE); Toast.makeText(MainActivity.this,"Oops! Something went wrong!", Toast.LENGTH_SHORT).show(); } }); }}
আপনি যদি আপনার সার্ভারে, কাস্টম ডাটাবেজ তৈরী করতে চান, তাহলে কিভাবে তৈরি করবেন । দয়া করে এই ফাইলটি অনুসরণ করে, তৈরি করার চেষ্টা করুন। কাস্টম ডাটাবেজ তৈরী করুন আপনার সার্ভারে আপলোড করুন।
01 অ্যান্ড্রয়েড স্টুডিও থেকে সার্ভার লিঙ্ক চেঞ্জ করুন। (\app\src\main\java\com\example\app\MainActivity.java
.baseUrl(“https://bd124.com/”)
02 কাস্টমস ফাইল যদি তৈরি করেন তাহলে নাম চেঞ্জ করুন। অ্যান্ড্রয়েড স্টুডিও থেকে। (\app\src\main\java\com\example\app\http.java
@GET(“file.json”)
[ { "id": "1", "name": "Mercedes Benz", "desc": "Mercedes Benz is a global automobile marque and a division of the German company Daimler AG. The brand is known for luxury vehicles, buses, coaches, and lorries. The headquarters is in Stuttgart, Baden-Württemberg. The name first appeared in 1926 under Daimler-Benz.", "image": "https://drive.google.com/uc?id=11St5abH8NXzxS0LtuqimDaV3IDsXW-bW" }, { "id": "2", "name": "BMW", "desc": "BMW AG, originally an initialism for Bayerische Motoren Werke in German, or Bavarian Motor Works in English) is a German multinational company which currently produces luxury automobiles and motorcycles, and also produced aircraft engines until 1945.", "image": "https://drive.google.com/uc?id=1vo815XZpsVgStC-gU9-O_oP3SeBoA6T4" }, { "id": "3", "name": "Bentley", "desc": "Bentley Motors Limited is a British manufacturer and marketer of luxury cars and SUVs—and a subsidiary of the Volkswagen Group since 1998.", "image": "https://drive.google.com/uc?id=1J26Rmf_sPjUdEgiAesHqN8i5o-JlOwSl" }]
সিম্পল ডাটা লিস্ট রিসাইকেলেরভিউ তৈরি করতে চাইলে পিছনের পোস্ট দেখুন।