Je construis une application Android et lorsque l'utilisateur clique sur l'un des éléments de mon RecyclerView, un AlertDialog apparaît qui leur permet de modifier cet élément de la liste.Comment remplir la vue personnalisée de AlertDialog avec des données dynamiques
Cependant, je voudrais afficher quelques informations sur l'élément qu'ils éditent sur le AlertDialog mais ne trouve pas un moyen de remplir le contenu de ma mise en page personnalisée que j'ai ajouté à la boîte de dialogue.
onClickListener qui crée le AlertDialog
holder.ivLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mContext instanceof MainActivity) {
MainActivity mainActivity = (MainActivity) mContext;
AlertDialog.Builder builder = new AlertDialog.Builder(mainActivity);
builder.setTitle(mContext.getString(R.string.alert_food_detail_title));
builder.setView(mainActivity.getLayoutInflater().inflate(R.layout.alert_detail_food, null))
.setPositiveButton(mContext.getString(R.string.alert_food_detail_ok), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setNeutralButton(mContext.getString(R.string.alert_food_detail_cancel), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
})
.setNegativeButton(mContext.getString(R.string.alert_food_detail_exclude), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}
});
XML pour la mise en page personnalisée
<?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="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/textview_alert_food_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:textColor="@color/gray"
android:textSize="16sp" />
<EditText
android:id="@+id/edittext_alert_food_quantity"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="numberDecimal"
android:textColor="@color/gray"
android:textSize="16sp" />
<TextView
android:id="@+id/textview_alert_food_kcal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/gray"
android:textSize="16sp" />
<TextView
android:id="@+id/textview_alert_food_carb"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/gray"
android:textSize="16sp" />
<TextView
android:id="@+id/textview_alert_food_prot"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/gray"
android:textSize="16sp" />
<TextView
android:id="@+id/textview_alert_food_fat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="@color/gray"
android:textSize="16sp" />
</LinearLayout>
Si plus de code est nécessaire laissez-moi savoir.
Voici à quoi ressemble mon AlertDialog maintenant, la vue personnalisée est appliquée correctement, mais il y a 5 TextViews que je voudrais remplir avec des données personnalisées et un EditText, une idée sur la façon de le faire?
Vous pouvez gonfler la vue avant de la définir via le Builder. Cela vous permettra d'accéder à chaque texte par leurs identifiants. – RScottCarson
Génial, avez-vous un exemple @RScottCarson? Cela résoudrait mon problème à coup sûr. – leofontes
La réponse Liée par Mike M. montre les bases de ce que vous devez faire. – RScottCarson