2017-04-14 29 views
0

我将colors.xml添加到AlertDialog,并希望它在单击某个视图时作出响应。对话框显示正确,当我在其中一个视图上执行performClick()时。但是当我尝试在手机上运行它并单击时,监听器不会被触发,尽管它应该是。自定义AlertDialog view.onClickListener无法正常工作

这里是我的代码:

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

因为你不使用膨胀的看法。 更换

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

builder.setView(fl_colors); 
相关问题