2017-04-14 32 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); 
相關問題