Salve, ho un problema, ho realizzato un rerecycleView con una serie di CardView ora quando clicco su una di essa devo fare in modo che si apra un'altra schermata contenente una serie di dettagli ho fatto così:
Adapter:
Schermata con i dettagli:
Layout:
ciò che mi restituisce quando eseguo è che ho null sulla schermata cioè non si caricano i dati anche se ho visto in debug e i dati ci sono nel database firebase, cosa non va?
Grazie in anticipo
Adapter:
Java:
public class AdapterListItinerary extends RecyclerView.Adapter<AdapterListItinerary.HolderListItinerary> {
private Context context;
private List<Itinerary> itineraryList;
public AdapterListItinerary(Context context, List<Itinerary> itineraryList) {
this.context = context;
this.itineraryList = itineraryList;
}
@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);
}
private StartActivity startActivity;
@Override
public void onBindViewHolder(@NonNull AdapterListItinerary.HolderListItinerary holder, int position) {
String titleItinerary = itineraryList.get(position).getTitleItinerary();
holder.title_row_itinerary.setText(titleItinerary);
String email = itineraryList.get(position).getEmail();
holder.email_user_row_itinerary.setText(email);
holder.progressBar_row_itinerary.setVisibility(View.VISIBLE);
try {
Picasso.get().load(itineraryList.get(position).getImage_itinerary())
.placeholder(R.drawable.ic_launcher_foreground)
.into(holder.imageView_row_itinerary, new com.squareup.picasso.Callback() {
@Override
public void onSuccess() {
holder.progressBar_row_itinerary.setVisibility(View.GONE);
}
@Override
public void onError(Exception e) {
Toast.makeText(context, "Impossibile caricare una delle immagini" + e.getMessage(), Toast.LENGTH_SHORT).show();
holder.progressBar_row_itinerary.setVisibility(View.GONE);
}
});
} catch (Exception e) {
}
holder.itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Fragment fg = new DetailsItinerary_fragment(startActivity);
FragmentManager fm = ((AppCompatActivity)context).getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.activity_main,fg).addToBackStack(null).commit();
}
});
}
@Override
public int getItemCount() {
return itineraryList.size();
}
class HolderListItinerary extends RecyclerView.ViewHolder {
ImageView imageView_row_itinerary;
ProgressBar progressBar_row_itinerary;
TextView title_row_itinerary;
TextView email_user_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);
email_user_row_itinerary = itemView.findViewById(R.id.email_user_row_itinerary);
}
}
}
}
Schermata con i dettagli:
Java:
public class DetailsItinerary_fragment extends Fragment {
private final StartActivity startActivity;
private ImageButton buttonBackDetailsItinerary;
private Button buttonInsertReviews;
private Button buttonViewsReviews;
List<Itinerary> itineraryList;
private DetailsItinerary_presenter detailsItinerary_presenter;
private Explore_fragment explore_fragment;
TextView title_details_itinerary;
TextView hours_details_Itinerary;
TextView minutes_details_Itinerary;
TextView seconds_details_Itinerary;
TextView difficultLivel_details_Itinerary;
TextView description_detailsItinerary;
ImageView imageView_details_itinerary;
ProgressBar progressBar_details_itinerary;
String itineraryId;
public DetailsItinerary_fragment(StartActivity startActivity) {
this.startActivity = startActivity;
}
public StartActivity getStartActivity() {
return startActivity;
}
@SuppressLint("MissingInflatedId")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_details_itinerary, container, false);
buttonBackDetailsItinerary = view.findViewById(R.id.back_detailsItinerary);
buttonInsertReviews = view.findViewById(R.id.button_insert_review);
buttonViewsReviews = view.findViewById(R.id.button_views_review);
title_details_itinerary = view.findViewById(R.id.title_details_itinerary);
hours_details_Itinerary = view.findViewById(R.id.hours_details_Itinerary);
minutes_details_Itinerary = view.findViewById(R.id.minutes_details_Itinerary);
difficultLivel_details_Itinerary = view.findViewById(R.id.difficultLivel_details_Itinerary);
description_detailsItinerary = view.findViewById(R.id.description_detailsItinerary);
seconds_details_Itinerary = view.findViewById(R.id.seconds_details_Itinerary);
imageView_details_itinerary = view.findViewById(R.id.imageView_details_itinerary);
progressBar_details_itinerary = view.findViewById(R.id.progressBar_details_itinerary);
Intent intent = getActivity().getIntent();
itineraryId = intent.getStringExtra("itineraryId");
detailsItinerary_presenter = new DetailsItinerary_presenter(this);
listenToClickEvents();
loadItineraryDetails();
return view;
}
private void listenToClickEvents() {
buttonBackDetailsItinerary.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
detailsItinerary_presenter.onButtonBackDetailsItineraryClicked();
}
});
buttonInsertReviews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
detailsItinerary_presenter.onButtonInsertReviewsClicked();
}
});
buttonViewsReviews.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
detailsItinerary_presenter.onButtonViewsReviewsClicked();
}
});
}
/* private void loadItineraryDetails() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference referenceDb = database.getReference("Itinerary");
itineraryList = new ArrayList<>();
Itinerary itinerary = new Itinerary();
itineraryList.clear();
referenceDb.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 itinerary = new Itinerary(
(String) ds.child("titleItinerary").getValue(),
(String) ds.child("descriptionItinerary").getValue(),
(String) ds.child("difficultyLevel").getValue(),
(String) ds.child("hours").getValue(),
(String) ds.child("minutes").getValue(),
(String) ds.child("seconds").getValue(),
String.valueOf(ds.child("image").getValue()));
itineraryList.add(itinerary);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}*/
private void loadItineraryDetails() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference referenceDb = database.getReference("Itinerary");
referenceDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String titleItinerary = "" + snapshot.child("titleItinerary").getValue();
String descriptionItinerary = "" + snapshot.child("descriptionItinerary").getValue();
String difficultyLevel = "" + snapshot.child("difficultyLevel").getValue();
String hours = "" + snapshot.child("hours").getValue();
String minutes = "" + snapshot.child("minutes").getValue();
String seconds = "" + snapshot.child("seconds").getValue();
String image = "" + snapshot.child("image").getValue();
title_details_itinerary.setText(titleItinerary);
description_detailsItinerary.setText(descriptionItinerary);
difficultLivel_details_Itinerary.setText(difficultyLevel);
hours_details_Itinerary.setText(hours);
minutes_details_Itinerary.setText(minutes);
seconds_details_Itinerary.setText(seconds);
seconds_details_Itinerary.setText(seconds);
imageView_details_itinerary.setImageURI(Uri.parse(image));
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
Layout:
Codice:
<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:id="@+id/fragment_details_itinerary"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@drawable/sfondo"
android:gravity="center"
tools:context=".view.fragment.DetailsItinerary_fragment">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@drawable/shape_toolbar">
<ImageButton
android:id="@+id/back_detailsItinerary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="14dp"
android:background="@color/transparent"
android:src="@drawable/ic_back_explore" />
<TextView
android:id="@+id/title_DetailsItinerary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="5dp"
android:layout_marginEnd="172dp"
android:text="@string/fragment_detailsItinerary_textView_title"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold">
</TextView>
<TextView
android:id="@+id/subTitle_DetailsItinerary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="15dp"
android:layout_marginEnd="150dp"
android:layout_marginBottom="8dp"
android:text="@string/fragment_detailsItinerary_textView_subTitle"
android:textColor="@color/white"
android:textSize="16sp">
</TextView>
</RelativeLayout>
<ScrollView
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="676dp"
android:layout_marginTop="55dp"
android:padding="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/details_itinerary"
android:layout_width="match_parent"
android:layout_height="196dp"
android:layout_marginEnd="5dp"
android:background="@color/grey">
<ImageView
android:id="@+id/imageView_details_itinerary"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progressBar_details_itinerary"
style="?android:attr/progressBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="73dp"
android:visibility="gone" />
</RelativeLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/title_detailsItinerary"
android:layout_marginTop="10dp"
android:layout_toEndOf="@id/details_itinerary">
<TableRow>
<TextView
android:id="@+id/hours_detailsItinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary_textView_hours"
android:textSize="20sp" />
<TextView
android:id="@+id/hours_details_Itinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary__insert_hours"
android:textSize="20sp" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/minutes_detailsItinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary_textView_minutes"
android:textSize="20sp" />
<TextView
android:id="@+id/minutes_details_Itinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary__insert_minutes"
android:textSize="20sp" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/seconds_detailsItinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary_textView_seconds"
android:textSize="20sp" />
<TextView
android:id="@+id/seconds_details_Itinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary__insert_seconds"
android:textSize="20sp" />
</TableRow>
<TableRow>
<TextView
android:id="@+id/difficultLivel_detailsItinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary_textView_difficultLivel"
android:textSize="20sp" />
<TextView
android:id="@+id/difficultLivel_details_Itinerary"
style="@style/TextAppearance.MaterialComponents.Caption"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:text="@string/fragment_detailsItinerary__insert_difficultLivel"
android:textSize="20sp" />
</TableRow>
</TableLayout>
<TextView
android:id="@+id/title_details_itinerary"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_toEndOf="@id/details_itinerary"
android:gravity="center"
android:text="@string/fragment_detailsItinerary_textView_titleItinerary"
android:textSize="30sp" />
<TextView
android:id="@+id/description_detailsItinerary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="@string/fragment_review_text_input_description"
android:textSize="18sp" />
<TextView
android:id="@+id/map_detailsItinerary"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_toEndOf="@id/details_itinerary"
android:gravity="center"
android:text="@string/fragment_detailsItinerary_textView_map"
android:textSize="30sp" />
<org.osmdroid.views.MapView
android:id="@+id/mapview"
android:layout_width="377dp"
android:layout_height="222dp"
android:layout_marginStart="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.492"
app:layout_constraintVertical_bias="0.62">
</org.osmdroid.views.MapView>
<!-- MAPPA PER ITINERARIO-->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="27dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mapview"
app:layout_constraintVertical_bias="0.217"
tools:ignore="MissingConstraints">
<Button
android:id="@+id/button_views_review"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:gravity="center"
android:text="@string/fragment_detailsItinerary_button_views_review"
android:textAllCaps="false"
android:textColor="@color/white"
android:textIsSelectable="false"
android:textSize="16sp"
android:textStyle="normal"
app:backgroundTint="#8668A136"
app:cornerRadius="25dp">
</Button>
<Button
android:id="@+id/button_insert_review"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:gravity="center"
android:text="@string/fragment_detailsItinerary_button_insert_review"
android:textAllCaps="false"
android:textColor="@color/white"
android:textIsSelectable="false"
android:textSize="16sp"
android:textStyle="normal"
app:backgroundTint="#8668A136"
app:cornerRadius="25dp">
</Button>
</LinearLayout>
</LinearLayout>
</ScrollView>
</RelativeLayout>
ciò che mi restituisce quando eseguo è che ho null sulla schermata cioè non si caricano i dati anche se ho visto in debug e i dati ci sono nel database firebase, cosa non va?
Grazie in anticipo
Ultima modifica: