如何使用动态数据填充AlertDialog的自定义视图

时间:2017-03-22 22:26:06

标签: android android-recyclerview alertdialog android-viewholder

我正在构建一个Android应用程序,当用户点击我的RecyclerView的其中一个项目时,会弹出一个AlertDialog,允许他们编辑该列表中的项目。

但是,我想在AlertDialog上显示有关他们正在编辑的项目的一些信息,但是无法找到填充我添加到对话框的自定义布局中内容的方法。

创建AlertDialog的onClickListener

    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

<?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>

如果需要更多代码,请与我联系。

这就是我的AlertDialog现在的样子,自定义视图正确应用但是有5个TextView我想填充自定义数据和一个EditText,任何关于如何做的想法?

My AlertDialog looks like this right now

1 个答案:

答案 0 :(得分:0)

您应该为它创建自定义对话框类。您为Dialog创建了自己的布局,将其用于您自己的对话框类。

    public class CustomDialog extends Dialog implements View.OnClickListener{
    private TextView foodName,foodQuantity,foodKcal,foodCarb,foodProt,foodFat;
    public CustomDialog(Context context) {
        super(context);
        setContentView(R.layout.dialog_layout);
        foodName = (TextView)findViewById(R.id.textview_alert_food_name);
        foodQuantity = (TextView)findViewById(R.id.textview_alert_food_name);
        foodKcal = (TextView)findViewById(R.id.textview_alert_food_kcal);
        foodCarb = (TextView)findViewById(R.id.textview_alert_food_carb);
        foodProt = (TextView)findViewById(R.id.textview_alert_food_prot);
        foodFat = (TextView)findViewById(R.id.textview_alert_food_fat);
        foodName.setOnClickListener(this);
        foodQuantity.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if(view == foodName){

        }else if(view == foodQuantity){
            // access them like this
        }
    }
}

此课程将解决您的解决方案。如果需要,可以将View.OnClickListener作为参数发送,并在活动中声明您的主体。或者像这样使用它。