我已经创建了一个带有自定义布局的警告对话框,它工作正常但是当我尝试将单选项设置为alertDialogBuilder时,它会出现ClassCastException: android.support.v7.widget.LinearLayoutCompat$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams
错误
View viewDialog = LayoutInflater.from(this).inflate(R.layout.dialog_verify, null,false);
alertDialogBuilder.setView(viewDialog);
final TextView tvDialogTitle = (TextView) viewDialog.findViewById(R.id.dialog_textview_title);
final Button btnCancel = (Button) viewDialog.findViewById(R.id.dialog_btn_cancel);
final Button btnVerify = (Button) viewDialog.findViewById(R.id.dialog_btn_verify);
btnCancel.setVisibility(View.GONE);
btnVerify.setText("cancel");
btnVerify.setTextColor(ContextCompat.getColor(this, R.color.colorPrimary));
btnVerify.setBackgroundResource(R.drawable.round_white);
//set single layout structure
alertDialogBuilder.setSingleChoiceItems(arrayReportType, selectedIndex, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
selectedIndex=which;
tvReportStatus.setText(arrayReportType[selectedIndex]);
dialog.dismiss();
}
});
alertDialogBuilder.setCancelable(true);
Typeface font_bold = Typeface.createFromAsset(getAssets(), Constants.FONT_BOLD);
tvDialogTitle.setTypeface(font_bold);
tvDialogTitle.setText("Summary");
final AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
更新:XML FILE,我从中提升警报对话框
<TextView
android:id="@+id/dialog_textview_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:layout_marginBottom="20dp"/>
<LinearLayout
android:id="@+id/dialog_ll_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="15dp"
android:paddingRight="15dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:fontFamily="sans-serif-light"
android:id="@+id/dialog_btn_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="16dp"
android:background="@drawable/round_white"
android:text="Cancel"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/colorAccent" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:fontFamily="sans-serif-light"
android:id="@+id/dialog_btn_verify"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="16dp"
android:background="@drawable/round_blue"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>
与问题相关的导入
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.TimePicker;
import org.json.JSONException;
import org.json.JSONObject;
答案 0 :(得分:8)
<强> interpreter example 强>
抛出以指示代码已尝试将对象强制转换为 它不是实例的子类。
不要
import android.support.v7.app.AlertDialog;
<强> DO 强>
import android.app.AlertDialog
注意强>
您是 support.v7
库。调用本机库。
答案 1 :(得分:3)
@Zordid是正确的。这是使用支持库25时AOSP中的错误。尝试使用其他版本的支持库或等待修复。 AOSP问题中也有解决方法。
答案 2 :(得分:1)
有一个新的支持库版本25.4.0修复了这个问题。
由于此库刚刚发布,请确保存储库部分包含带有“https://maven.google.com”的maven部分,例如
allprojects {
repositories {
jcenter()
maven {
url "https://maven.google.com"
}
}
}