I'm new to the android backend. In my application, I need to show the data as in the photo. These are blocks 200x200 and more. Each block is divided by 10x10. I used RecyclerView in another RecyclerView to get this view, but it is slow. How to make it faster? I used part loading (adapter.notifyDataSetChanged) but scrolling working bad
Asked
Active
Viewed 106 times
0
buka
- 83
- 2
- 6
-
Perhaps instead of recycler view inside a recycler view try using a GridLayoutManager... see here https://stackoverflow.com/questions/40587168/simple-android-grid-example-using-recyclerview-with-gridlayoutmanager-like-the – Quinn Jan 03 '20 at 16:55
-
Are you making a lot of logic in the RecyclerView adapter? if so you should do that logic before, and in the adapter just simply display the views – Diogo Rosa Jan 03 '20 at 17:20
-
Thanks to all for the help – buka Jan 04 '20 at 18:43
1 Answers
0
I did it which one is very fast:
build.gradle(Module:app) Here add Dependency
implementation 'androidx.recyclerview:recyclerview:1.1.0'
string.xml
<resources>
<string name="app_name">Recycler view</string>
<string-array name="country_description">
<item>Bangladesh is a Beautiful</item>
<item>India is a Awesome</item>
<item>Pakistan is a nice country</item>
<item>SaudiArabia is a good</item>
<item>Srilanka is a pretty</item>
</string-array>
<string-array name="country_name">
<item>Bangladesh</item>
<item>India</item>
<item>Pakistan</item>
<item>SaudiArabia</item>
<item>Srilanka</item>
</string-array>
</resources>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
android:padding="10dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
sample_layout.xml create
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<ImageView
android:id="@+id/myImageViewId"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="5dp"
android:src="@drawable/bd" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Title"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"
android:textStyle="bold" />
<TextView
android:id="@+id/descriptionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Description will be here"
android:textAppearance="@style/TextAppearance.AppCompat.SearchResult.Subtitle" />
</LinearLayout>
</LinearLayout>
MainActivity.java
package com.example.recyclerview;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
MyAdapter myAdapter;
RecyclerView recyclerView;
int[] images = {R.drawable.bd, R.drawable.india, R.drawable.pak, R.drawable.saudi, R.drawable.srilanka};
String[] title, desc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
title = getResources().getStringArray(R.array.country_name);
desc = getResources().getStringArray(R.array.country_description);
myAdapter = new MyAdapter(this, title, desc, images);
recyclerView.setAdapter(myAdapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
}
MyAdapter.java
package com.example.recyclerview;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
Context context;
String[] title, desc;
int[] images;
public MyAdapter(Context context, String[] title, String[] desc, int[] images) {
this.context = context;
this.title = title;
this.desc = desc;
this.images = images;
}
// ---------------- Convert Sample layout xml to Java code -----------------------------
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.sample_layout, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.titleTextView.setText(title[position]);
holder.descTextView.setText(desc[position]);
holder.flagImageView.setImageResource(images[position]);
}
@Override
public int getItemCount() {
return title.length;
}
// ---------------------Create Recycler view Holder Personally--------
class MyViewHolder extends RecyclerView.ViewHolder {
TextView titleTextView, descTextView;
ImageView flagImageView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.titleTextView);
descTextView = itemView.findViewById(R.id.descriptionTextView);
flagImageView = itemView.findViewById(R.id.myImageViewId);
}
}
}
Md. Nazmul Islam
- 31
- 5