Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ClassCastException-获取活动';对话框片段的适配器类的s视图引用_Java_Android_Classcastexception - Fatal编程技术网

Java ClassCastException-获取活动';对话框片段的适配器类的s视图引用

Java ClassCastException-获取活动';对话框片段的适配器类的s视图引用,java,android,classcastexception,Java,Android,Classcastexception,我有一个包含EditText和Dialogfragment的活动。对于DialogFragment,我有一个ListView和该ListView的适配器类。listview有一个TextView和一个按钮。我想将listitem的文本写入listitem按钮单击时活动的EditText(然后关闭对话框)。我几乎已经实现了这一切,但它在一些设备中显示了ClassCastException。以下是列表项的按钮clickListener: holder.button.setOnClickListene

我有一个包含EditText和Dialogfragment的活动。对于DialogFragment,我有一个ListView和该ListView的适配器类。listview有一个TextView和一个按钮。我想将listitem的文本写入listitem按钮单击时活动的EditText(然后关闭对话框)。我几乎已经实现了这一切,但它在一些设备中显示了ClassCastException。以下是列表项的按钮clickListener:

holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText editText=((MainActivity)v.getContext()).findViewById(R.id.write_text);
            editText.removeTextChangedListener(((MainActivity) Objects.requireNonNull(v.getContext())).textWatcher);
            editText.addTextChangedListener(((MainActivity) Objects.requireNonNull(v.getContext())).textWatcher2);

            editText.getText().insert(editText.getSelectionStart(), listData.get(position).getBio());

            editText.removeTextChangedListener(((MainActivity) Objects.requireNonNull(v.getContext())).textWatcher2);
            editText.addTextChangedListener(((MainActivity) Objects.requireNonNull(v.getContext())).textWatcher);

            dialog.dismiss();


        }
    });
我不明白为什么会有例外。以下是Crashlytics的堆栈跟踪:

Fatal Exception: java.lang.ClassCastException: b.b.q.v0 cannot be cast to com.xx.xx.xx.MainActivity
       at com.xx.xx.Adapters.ListAdapter.access$000(ListAdapter.java)
       at android.view.View.performClick(View.java:4508)
       at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java)
       at android.view.View$PerformClick.run(View.java:18675)
       at android.os.Handler.handleCallback(Handler.java:733)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:136)
       at android.app.ActivityThread.main(ActivityThread.java:5590)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1280)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1096)
       at dalvik.system.NativeStart.main(NativeStart.java)
任何帮助都将不胜感激


编辑:这只发生在Android 4.4设备上

当您初始化适配器类时,另一种方法是传递一个活动引用,如下所示

public class MyAdapter(Activity activity)
当您在对话框片段中创建适配器的实例时

Adapter adapter = new Adapter(getActivity());
在这种情况下,
getActivity
方法将把附加的活动返回给对话框片段

最后,您将能够使用活动实例适配器,如下所示

 EditText editText = activity.findViewById(R.id.write_text);
另一种方法是通过接口创建通信


关于

将click数据从适配器传递到dialogFagment,然后使用interfaces/Callback将dialogfragment传递到activity这适用于activity.findViewVyId(),但如何在activity中声明公共变量,如textWatcher?明白了。也将这些变量作为参数传递