我正在将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>
答案 0 :(得分:1)
因为您不使用虚增的视图。 取代
builder.setView(layoutInflater.inflate(R.layout.colors,null));
与
builder.setView(fl_colors);