代码没有报错,点击控件闪退(跳转到布局),日志有报错信息(看不懂)
这是日志信息
11/16 14:15:53: Launching app
$ adb install-multiple -r -t -p com.example.administrator.helloandroid F:\HelloAndroid\app\build\intermediates\split-apk\debug\slices\slice_1.apk F:\HelloAndroid\app\build\intermediates\instant-run-apk\debug\app-debug.apk 
Split APKs installed in 531 ms
$ adb shell am start -n "com.example.administrator.helloandroid/com.example.administrator.helloandroid.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Connected to process 25627 on device emulator-5554
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
W/System: ClassLoader referenced unknown path: /data/app/com.example.administrator.helloandroid-1/lib/x86
I/InstantRun: starting instant run server: is main process
W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
        at void android.support.v4.view.ViewCompat.setBackground(android.view.View, android.graphics.drawable.Drawable) (ViewCompat.java:2341)
        at void android.support.v7.widget.ActionBarContainer.<init>(android.content.Context, android.util.AttributeSet) (ActionBarContainer.java:62)
        at java.lang.Object java.lang.reflect.Constructor.newInstance0!(java.lang.Object[]) (Constructor.java:-2)
        at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:430)
        at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:645)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:787)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet) (LayoutInflater.java:727)
        at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser, android.view.View, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:858)
        at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser, android.view.View, android.util.AttributeSet, boolean) (LayoutInflater.java:821)
        at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean) (LayoutInflater.java:518)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup, boolean) (LayoutInflater.java:426)
        at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup) (LayoutInflater.java:377)
        at android.view.ViewGroup android.support.v7.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:607)
        at void android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:518)
        at void android.support.v7.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:466)
        at void android.support.v7.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:140)
        at void com.example.administrator.helloandroid.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:15)
        at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6662)
        at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1118)
        at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2599)
        at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2707)
        at void android.app.ActivityThread.-wrap12(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1460)
        at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:102)
        at void android.os.Looper.loop() (Looper.java:154)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6077)
        at java.lang.Object java.lang.reflect.Method.invoke!(java.lang.Object, java.lang.Object[]) (Method.java:-2)
        at void com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run() (ZygoteInit.java:866)
        at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:756)
    Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.administrator.helloandroid-1/base.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.administrator.helloandroid-1/split_lib_slice_7_apk.apk", zip file "/d
        at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:56)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:380)
        at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
        at void android.support.v4.view.ViewCompat.setBackground(android.view.View, android.graphics.drawable.Drawable) (ViewCompat.java:2341)
        at void android.support.v7.widget.ActionBarContainer.<init>(android.content.Context, android.util.AttributeSet) (ActionBarContainer.java:62)
        at java.lang.Object java.lang.reflect.Constructor.newInstance0!(java.lang.Object[]) (Constructor.java:-2)
        at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:430)
        at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:645)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:787)
        at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet) (LayoutInflater.java:727)
        at void android.view.LayoutInflater.rInflat这是布局代码<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:background="@drawable/bg_custom_dialog">    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#000"
        android:text="提示"
        android:textStyle="bold"
        android:layout_marginTop="20dp"/>
    <TextView
        android:id="@+id/tv_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:textColor="#000"
        android:text="删除?"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        />
    <View
        android:layout_width="match_parent"
        android:layout_height="0.5dp"
        android:background="#999999"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tv_cancel"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="取消"
            android:textSize="20sp"
            android:textColor="#0fa8ce"
            android:gravity="center"/>
        <view
            android:layout_width="0.5dp"
            android:layout_height="match_parent"
            android:background="#999999"/>
        <TextView
            android:id="@+id/tv_confirm"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="确定"
            android:textSize="20sp"
            android:textColor="#0fa8ce"
            android:gravity="center"/>
    </LinearLayout>
</LinearLayout>

解决方案 »

  1.   

    这是文件列表,与闪退控件有关的4个文件
    我也不知道大佬们还需要哪些,我就都上传了吧这是第一个  CustomDialogActivity
    package com.example.administrator.helloandroid;import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;import com.example.administrator.helloandroid.until.ToastUntil;
    import com.example.administrator.helloandroid.widget.CustomDialog;public class CustomDialogActivity extends AppCompatActivity {
        private Button mBtndialog;    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_custom);
            mBtndialog = findViewById(R.id.btn_custom_dialog);
            mBtndialog.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CustomDialog customDialog = new CustomDialog(CustomDialogActivity.this);
                    customDialog.setTitle("提示").setMessage("确认删除此项?").setCancel("取消", new CustomDialog.IOnCancelListener() {
                        @Override
                        public void onCancel(CustomDialog dialog) {
                            //点击取消之后
                            ToastUntil.showMsg(CustomDialogActivity.this,"cancel...");
                        }
                    }).setConfirm("确认", new CustomDialog.IOnConfirmListener() {
                        @Override
                        public void onConfirm(CustomDialog dialog) {
                            //点击确认之后
                            ToastUntil.showMsg(CustomDialogActivity.this,"confirm...");
                        }
                    }).show();
                }
            });
        }
    }
    这是第二个  CustomDialogpackage com.example.administrator.helloandroid.widget;import android.app.Dialog;
    import android.content.Context;
    import android.graphics.Point;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.text.TextUtils;
    import android.view.Display;
    import android.view.View;
    import android.view.WindowManager;
    import android.widget.TextView;import com.example.administrator.helloandroid.R;public class CustomDialog extends Dialog implements View.OnClickListener {
        private TextView mTvTitle,mTvMessage,mTvCancel,mTvConfirm;
        private String title,message,cancel,confirm;
        private IOnCancelListener cancelListener;
        private IOnConfirmListener confirmListener;
        public CustomDialog(@NonNull Context context) {
            super(context);
        }    public CustomDialog(@NonNull Context context, int themeResId) {
            super(context, themeResId);
        }    public CustomDialog setTitle(String title) {
            this.title = title;
            return this;
        }    public CustomDialog setMessage(String message) {
            this.message = message;
            return this;
        }    public CustomDialog setCancel(String cancel,IOnCancelListener listener) {
            this.cancel = cancel;
            this.cancelListener = listener;
            return this;
        }    public CustomDialog setConfirm(String confirm,IOnConfirmListener listener) {
            this.confirm = confirm;
            this.confirmListener = listener;
            return this;
        }    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layout_custom_dialog);
            //设置宽度
            WindowManager m= getWindow().getWindowManager();
            Display d =m.getDefaultDisplay();
            WindowManager.LayoutParams p = getWindow().getAttributes();
            Point size = new Point();
            d.getSize(size);
            p.width = (int)(size.x * 0.8);
            getWindow().setAttributes(p);
            mTvTitle = findViewById(R.id.tv_title);
            mTvMessage = findViewById(R.id.tv_message);
            mTvCancel = findViewById(R.id.tv_cancel);
            mTvConfirm = findViewById(R.id.tv_confirm);
            if(!TextUtils.isEmpty(title)){
                mTvTitle.setText(title);
            }
            if(!TextUtils.isEmpty(message)){
                mTvMessage.setText(message);
            }
            if(!TextUtils.isEmpty(cancel)){
                mTvCancel.setText(cancel);
            }
            if(!TextUtils.isEmpty(confirm)){
                mTvConfirm.setText(confirm);
            }        mTvCancel.setOnClickListener(this);
            mTvConfirm.setOnClickListener(this);
        }    @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.tv_cancel:
                    if(cancelListener != null){
                        cancelListener.onCancel(this);
                    }
                    dismiss();
                    break;
                case R.id.tv_confirm:
                    if(confirmListener != null){
                        confirmListener.onConfirm(this);
                    }
                    dismiss();
                    break;
            }
        }    public interface IOnCancelListener{
            void onCancel(CustomDialog dialog);
        }
        public interface IOnConfirmListener{
            void onConfirm(CustomDialog dialog);
        }
    }
    这是第三个  activity_custom.xml<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">    <Button
            android:id="@+id/btn_custom_dialog"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="自定义dialog"
            android:textAllCaps="false"/>
    </LinearLayout>这是第四个 layout_custom_dialog.xml<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center_horizontal"
        android:background="@drawable/bg_custom_dialog">    <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textColor="#000"
            android:text="提示"
            android:textStyle="bold"
            android:layout_marginTop="20dp"/>
        <TextView
            android:id="@+id/tv_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp"
            android:textColor="#000"
            android:text="删除?"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="20dp"
            />
        <View
            android:layout_width="match_parent"
            android:layout_height="0.5dp"
            android:background="#999999"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/tv_cancel"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="取消"
                android:textSize="20sp"
                android:textColor="#0fa8ce"
                android:gravity="center"/>
            <view
                android:layout_width="0.5dp"
                android:layout_height="match_parent"
                android:background="#999999"/>
            <TextView
                android:id="@+id/tv_confirm"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:text="确定"
                android:textSize="20sp"
                android:textColor="#0fa8ce"
                android:gravity="center"/>
        </LinearLayout>
    </LinearLayout>
      

  2.   

    其实是很简单的问题,是说你某个空间或者对象没有定义,然后进行SetText操作时就会报错。你实在找不出问题,可以进入debug模式,然后在报错的地方打个断点,执行到断点后看看哪个对象没定义显示为null,然后处理就好了。
      

  3.   

    看了你的代码,你在CustomDialog类初始化 title,message,cancel,confirm;这几个变量为null,然后在OnCreat里面用isEmpty进行判断,有可能会出错哦。试试把那几个变量都初始化为空字符串""试试。
      

  4.   

    有位大佬帮我解决了,谢谢关心哈哈
    是一个View  的问题,注释了就可以直接运行了。谢谢回复