自定义AlertDialog view.onClickListener无法正常工作

时间:2017-04-14 14:45:53

标签: android dialog alert alertdialog

我正在将colors.xml添加到AlertDialog,并希望它在点击其中一个视图时作出响应。对话框显示正确,当我在其中一个视图上performClick()时,它会正常显示。但是当我尝试在手机上运行它并手动点击时,听众并没有被触发,尽管应该是。

这是我的代码:

我的MainActivity.java

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("pick a color");
builder.setCancelable(true);
FlexboxLayout fl_colors = (FlexboxLayout) layoutInflater.inflate(R.layout.colors,null);
builder.setView(layoutInflater.inflate(R.layout.colors,null));

final AlertDialog alert = builder.create();

for(int i=0;i<fl_colors.getChildCount();i+=1){
    View v_color = fl_colors.getChildAt(i);
    Log.d("DEBUG",v_color.toString()); // logs the element like: android.view.View{a7d0c87 V.ED..... ......I. 0,0-0,0 #7f0d00a6 app:id/btn_6}
    v_color.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            String color = (String) v.getTag();
            Log.d("DEBUG",color);

            alert.dismiss();
        }
    });
}

builder.show();

我的colors.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.flexbox.FlexboxLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:flexWrap="wrap"
    android:id="@+id/fb_colors">

    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_0"
        android:background="@drawable/circle"
        android:backgroundTint="#16a085"
        android:tag="#16a085"
        android:layout_margin="5dp"/>
    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_1"
        android:background="@drawable/circle"
        android:backgroundTint="#27ae60"
        android:tag="#27ae60"
        android:layout_margin="5dp"/>
    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_2"
        android:background="@drawable/circle"
        android:backgroundTint="#2980b9"
        android:tag="#2980b9"
        android:layout_margin="5dp"/>

    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_3"
        android:background="@drawable/circle"
        android:backgroundTint="#8e44ad"
        android:tag="#8e44ad"
        android:layout_margin="5dp"/>

    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_4"
        android:background="@drawable/circle"
        android:backgroundTint="#f39c12"
        android:tag="#f39c12"
        android:layout_margin="5dp"/>
    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_5"
        android:background="@drawable/circle"
        android:backgroundTint="#d35400"
        android:tag="#d35400"
        android:layout_margin="5dp"/>
    <View
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/btn_6"
        android:background="@drawable/circle"
        android:backgroundTint="#c0392b"
        android:tag="#c0392b"
        android:layout_margin="5dp"/>
</com.google.android.flexbox.FlexboxLayout>

1 个答案:

答案 0 :(得分:1)

因为您不使用虚增的视图。 取代

builder.setView(layoutInflater.inflate(R.layout.colors,null));

builder.setView(fl_colors);