Salve ho problemi nell'implementazione del recyclerView, in particolare mi da una schermata bianca anche se nel database ci sono dati che dovrebbe caricare e mi dice: " W/RecyclerView: No adapter attached; skipping layout". Di seguito il codice:
row_itinerary
fragment_explore
Explore_fragment
AdapterListItinerary:
In realtà in debug mi porta che in "ItineraryArrayList" non c'è nulla ma nel database c'è roba...come posso risolvere?
row_itinerary
XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
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="140dp"
android:layout_marginBottom="5dp"
app:cardBackgroundColor="@color/white"
app:cardCornerRadius="5dp"
app:cardElevation="0dp"
app:contentPadding="5dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints">
<RelativeLayout
android:layout_width="144dp"
android:layout_height="match_parent"
android:layout_marginEnd="5dp"
android:background="@color/grey">
<ImageView
android:id="@+id/imageView_row_itinerary"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:id="@+id/progressBar_row_itinerary"
style="?android:attr/progressBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="46dp"
android:visibility="gone"/>
</RelativeLayout>
<TextView
android:id="@+id/title_row_itinerary"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="255dp"
android:layout_height="48dp"
android:layout_alignParentEnd="true"
android:layout_marginEnd="0dp"
android:text="Itinerary Title"
android:textColor="#121111"
android:textSize="24sp" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
fragment_explore
XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".view.fragment.Explore_fragment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/ItineraryListRv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="5dp"
android:layout_marginBottom="0dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/row_itinerary">
</androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
Explore_fragment
Java:
package com.example.natour2022.view.fragment;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.natour2022.Adapter.AdapterListItinerary;
import com.example.natour2022.R;
import com.example.natour2022.model.Itinerary;
import com.example.natour2022.presenter.fragment.Explore_presenter;
import com.example.natour2022.view.activity.StartActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class Explore_fragment extends Fragment {
private final StartActivity startActivity;
private Explore_presenter explore_presenter;
private RecyclerView recyclerView;
private List<Itinerary> itineraryArrayList;
private AdapterListItinerary adapterListItinerary;
public Explore_fragment(StartActivity startActivity) {
this.startActivity = startActivity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public StartActivity getStartActivity() {
return startActivity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_explore, container, false);
recyclerView = root.findViewById(R.id.ItineraryListRv);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
itineraryArrayList = new ArrayList<>();
getAllItinerary();
return root;
}
private void getAllItinerary(){
Itinerary itinerary = new Itinerary();
itineraryArrayList.clear();
FirebaseDatabase.getInstance().getReference().child("Itinerary").
child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Iterable<DataSnapshot> dataSnapsho1 = snapshot.getChildren();
for(DataSnapshot ds : dataSnapsho1) {
if(ds.child("titleItinerary").getValue() != null){
itinerary.setTitleItinerary(ds.child("titleItinerary").getValue().toString());
itinerary.setImageUrl(Uri.parse(ds.child("imageUrl").getValue().toString()));
}
itineraryArrayList.add(itinerary);
}
adapterListItinerary = new AdapterListItinerary(getActivity(), itineraryArrayList);
recyclerView.setAdapter(adapterListItinerary);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
AdapterListItinerary:
Java:
package com.example.natour2022.Adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.natour2022.R;
import com.example.natour2022.model.Itinerary;
import com.squareup.picasso.Picasso;
import java.util.List;
public class AdapterListItinerary extends RecyclerView.Adapter<AdapterListItinerary.HolderListItinerary>{
private Context context;
private List<Itinerary> ItineraryArrayList;
public AdapterListItinerary(Context context, List<Itinerary> itineraryArrayList) {
this.context = context;
ItineraryArrayList = itineraryArrayList;
}
@NonNull
@Override
public HolderListItinerary onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_itinerary, parent, false);
return new HolderListItinerary(view);
}
@Override
public void onBindViewHolder(@NonNull AdapterListItinerary.HolderListItinerary holder, int position) {
String titleItinerary = ItineraryArrayList.get(position).getTitleItinerary();
try{
Picasso.get().load(ItineraryArrayList.get(position).getImageUrl())
.placeholder(R.drawable.ic_launcher_foreground)
.into(holder.imageView_row_itinerary, new com.squareup.picasso.Callback(){
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
}
});
}catch(Exception e){
}
}
@Override
public int getItemCount() {
return ItineraryArrayList.size();
}
class HolderListItinerary extends RecyclerView.ViewHolder{
ImageView imageView_row_itinerary;
ProgressBar progressBar_row_itinerary;
TextView title_row_itinerary;
public HolderListItinerary(@NonNull View itemView) {
super(itemView);
imageView_row_itinerary = itemView.findViewById(R.id.imageView_row_itinerary);
progressBar_row_itinerary = itemView.findViewById(R.id.progressBar_row_itinerary);
title_row_itinerary = itemView.findViewById(R.id.title_row_itinerary);
}
}
}
Ultima modifica: