ClassCastException:android.support.v7.widget.LinearLayoutCompat $ LayoutParams无法强制转换为android.widget.LinearLayout $ LayoutParams

时间:2017-01-07 05:46:34

标签: android android-layout android-alertdialog

我已经创建了一个带有自定义布局的警告对话框,它工作正常但是当我尝试将单选项设置为alertDialogBu​​ilder时,它会出现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;

3 个答案:

答案 0 :(得分:8)

<强> interpreter example

  

抛出以指示代码已尝试将对象强制转换为   它不是实例的子类。

不要

import android.support.v7.app.AlertDialog;

<强> DO

import android.app.AlertDialog

注意

您是 support.v7 库。调用本机库

答案 1 :(得分:3)

@Zordid是正确的。这是使用支持库25时AOSP中的错误。尝试使用其他版本的支持库或等待修复。 AOSP问题中也有解决方法。

Link to AOSP issue

答案 2 :(得分:1)

有一个新的支持库版本25.4.0修复了这个问题。

由于此库刚刚发布,请确保存储库部分包含带有“https://maven.google.com”的maven部分,例如

 allprojects {
    repositories {
       jcenter()
       maven {
         url "https://maven.google.com"
       }
    }

}