Я пытаюсь получить макет, подобный этому.
![LAYOUT](https://i.stack.imgur.com/nDwcE.png)
Данные хранятся в базе данных, например
pic [
{ college name: x
pic_url: https://x
}
{ college name:y
pic_url : http:// y
}
{
college name: z
pic_url: http:// z
}
]
Я хочу загрузить все изображения названия колледжа x в первом блоке под заголовком X, изображения названия колледжа y во втором блоке под заголовком X и так далее.
Я могу хранить данные в разных массивах и, используя несколько layoutmanager / layout layout, я могу показать данные.Но это делает это медленнее.Каковы способы достижения этого?и поскольку текст заголовка рисунка (заголовок 1. заголовок 2 и т. д.) фиксируется в текстовом представлении (не получая его из firebase), поэтому, когда я загружаю фрагмент, он показывает только все текстовые представления подряд, пока не будут получены данные из firebaseзагружается, что занимает около 3/4 секунд.
Как мне этого добиться?
edit: класс фрагмента
public class DashboardFragment extends Fragment {
View v;
ViewPager viewPager;
TabLayout tabLayout;
ValueEventListener mFragmentListener;
ValueEventListener mFragmentListener2;
ArrayList<firebasestore> list;
ArrayList<firebasestore> list2;
DatabaseReference mdatabaseRef;
GridLayoutManager gridLayoutManager;
GridLayoutManager gridLayoutManager2;
private firebaseAdapter firebaseAdapter1;
private firebaseAdapter firebaseAdapter2;
public DashboardFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mdatabaseRef = FirebaseDatabase.getInstance().getReference();
mdatabaseRef.keepSynced(true);
list = new ArrayList<>();
list2 = new ArrayList<>();
loadDetails();
loadDetails2();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_dashboard, container, false);
viewPager = v.findViewById(R.id.viewPa);
ownPagerAdapter own = new ownPagerAdapter(getActivity());
viewPager.setAdapter(own);
tabLayout = v.findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager, true);
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTimer(), 5000, 6000);
int mNoOfColumns = Utility.calculateNoOfColumns(getContext());
gridLayoutManager = new GridLayoutManager(getContext(), mNoOfColumns);
gridLayoutManager2 = new GridLayoutManager(getContext(), mNoOfColumns);
RecyclerView firebaseRecyclerView = (RecyclerView) v.findViewById(R.id.recyclerview_threeFragment1);
RecyclerView firebaseRecyclerView2 = (RecyclerView) v.findViewById(R.id.recyclerview_threeFragment2);
firebaseRecyclerView.setHasFixedSize(true);
firebaseAdapter1 = new firebaseAdapter(getContext(), list);
firebaseAdapter2 = new firebaseAdapter(getContext(), list2);
firebaseRecyclerView.setLayoutManager(gridLayoutManager);
firebaseRecyclerView2.setLayoutManager(gridLayoutManager2);
firebaseRecyclerView.setAdapter(firebaseAdapter1);
firebaseRecyclerView2.setAdapter(firebaseAdapter2);
firebaseRecyclerView.getItemAnimator().setChangeDuration(0);
firebaseRecyclerView2.getItemAnimator().setChangeDuration(0);
firebaseRecyclerView.setNestedScrollingEnabled(false);
firebaseRecyclerView2.setNestedScrollingEnabled(false);
return v;
}
// get data from firebase DB
private void loadDetails() {
Query mQuery = mdatabaseRef.orderByChild("uni").equalTo("x");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
list.clear(); // CLAER DATA BEFORE CHANGING. IF NOT DONE, IT WILL SHOW DUPLICATE DATA
for (DataSnapshot ds : dataSnapshot.getChildren()) {
list.add(ds.getValue(firebasestore.class));
}
firebaseAdapter1.notifyDataSetChanged(); // NOTIFY ADAPTER TO SHOW DATA IN VIEW WITHOUT RELOAD
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("LogFragment", "loadLog:onCancelled", databaseError.toException());
}
};
mFragmentListener = mQuery.limitToLast(25).addValueEventListener(valueEventListener);
}
private void loadDetails2() {
Query mQuery = mdatabaseRef.orderByChild("uni").equalTo("y");
ValueEventListener valueEventListener2 = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
list2.clear(); // CLAER DATA BEFORE CHANGING. IF NOT DONE, IT WILL SHOW DUPLICATE DATA
for (DataSnapshot ds : dataSnapshot.getChildren()) {
list2.add(ds.getValue(firebasestore.class));
}
firebaseAdapter2.notifyDataSetChanged(); // NOTIFY ADAPTER TO SHOW DATA IN VIEW WITHOUT RELOAD
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w("LogFragment", "loadLog:onCancelled", databaseError.toException());
}
};
mFragmentListener2 = mQuery.limitToLast(25).addValueEventListener(valueEventListener2);
}
@Override
public void onDestroyView () {
super.onDestroyView();
}
class MyTimer extends TimerTask {
@Override
public void run() {
if (getActivity() != null)
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (viewPager.getCurrentItem() == 0) {
viewPager.setCurrentItem(1);
} else if (viewPager.getCurrentItem() == 1) {
viewPager.setCurrentItem(2);
} else if (viewPager.getCurrentItem() == 2) {
viewPager.setCurrentItem(0);
}
}
});
}
}
}
XML этого фрагмента
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/appbar">
<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="wrap_content"
tools:contextOffers=".Activity.MainActivity">
<RelativeLayout
android:id="@+id/image_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/viewPa"
android:layout_width="match_parent"
android:layout_height="200dp"
android:overScrollMode="never" />
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/viewPa"
android:layout_marginTop="-40dp"
app:tabBackground="@drawable/selector_tab"
app:tabGravity="center"
app:tabIndicatorHeight="0dp" />
</RelativeLayout>
<!-- uni 1 -->
<android.support.v7.widget.CardView
android:id="@+id/cardview1"
android:layout_width="match_parent"
android:layout_height="35dp"
app:cardCornerRadius="2dp"
android:clickable="false"
android:importantForAutofill="auto"
android:layout_below="@+id/image_layout"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="-10dp"
android:padding="15dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title 1"
android:textSize="15sp"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_marginTop="5dp"
android:padding="5dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
<RelativeLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview1"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_threeFragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:background="#ffffff">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
<!-- block 2 -->
<android.support.v7.widget.CardView
android:id="@+id/cardview2"
android:layout_width="match_parent"
android:layout_height="35dp"
app:cardCornerRadius="2dp"
android:clickable="false"
android:layout_below="@+id/linear"
android:layout_marginLeft="0dp"
android:layout_marginRight="0dp"
android:layout_marginTop="0dp"
android:padding="15dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title 2"
android:textSize="15sp"
android:textColor="#ffffff"
android:textStyle="bold"
android:layout_marginTop="5dp"
android:padding="5dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
<RelativeLayout
android:id="@+id/linear2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/cardview2"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_threeFragment2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:background="#ffffff">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</RelativeLayout>
</ScrollView>