Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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
Android 从片段到活动的数据通信不工作_Android_Android Fragments - Fatal编程技术网

Android 从片段到活动的数据通信不工作

Android 从片段到活动的数据通信不工作,android,android-fragments,Android,Android Fragments,我做这件事已经有一段时间了,在几次失败的尝试之后,我非常接近于实现我所追求的目标。我从这个网站上找到了各种答案,其中最有帮助的是:- 我已经在我的程序中实现了哈洛的所有代码片段,但我还有一个问题 当我运行应用程序时,我点击列表项来加载“核心”片段,当它崩溃时,我会看到可怕的“不幸的是,应用程序已经停止” 下面是我的片段代码,我突出显示了有问题的行,我还包括了logcat的相关部分 任何帮助都将不胜感激 多谢各位 加里 LogCat 01-18 12:19:18.430: W/dalvikvm(

我做这件事已经有一段时间了,在几次失败的尝试之后,我非常接近于实现我所追求的目标。我从这个网站上找到了各种答案,其中最有帮助的是:-

我已经在我的程序中实现了哈洛的所有代码片段,但我还有一个问题

当我运行应用程序时,我点击列表项来加载“核心”片段,当它崩溃时,我会看到可怕的“不幸的是,应用程序已经停止”

下面是我的片段代码,我突出显示了有问题的行,我还包括了logcat的相关部分

任何帮助都将不胜感激

多谢各位

加里

LogCat

01-18 12:19:18.430: W/dalvikvm(1601): threadid=1: thread exiting with uncaught exception (group=0x40acf228)
01-18 12:19:18.440: E/AndroidRuntime(1601): FATAL EXCEPTION: main
01-18 12:19:18.440: E/AndroidRuntime(1601): java.lang.ClassCastException: com.epsilonitsystems.fragger.MainActivity cannot be cast to com.epsilonitsystems.fragger.CoreFragment$OnDataPass
01-18 12:19:18.440: E/AndroidRuntime(1601):     at com.epsilonitsystems.fragger.CoreFragment.onAttach(CoreFragment.java:25)
嗨,TNR, 谢谢你,就像我对碎片说的,他们真的很痛苦!!我已经添加了你建议的行,现在我遇到了一个崩溃!日志在下面。谢谢你到目前为止的帮助,我会很高兴把这个整理好

01-23 15:30:40.659: W/dalvikvm(3098): threadid=1: thread exiting with uncaught exception (group=0x40acf228)
01-23 15:30:40.749: E/AndroidRuntime(3098): FATAL EXCEPTION: main
01-23 15:30:40.749: E/AndroidRuntime(3098): java.lang.NullPointerException
01-23 15:30:40.749: E/AndroidRuntime(3098):     at com.epsilonitsystems.fragger.MainActivity.onDataPass(MainActivity.java:33)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at com.epsilonitsystems.fragger.CoreFragment$1.passData(CoreFragment.java:69)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at com.epsilonitsystems.fragger.CoreFragment$1.onClick(CoreFragment.java:62)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.view.View.performClick(View.java:3549)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.view.View$PerformClick.run(View.java:14393)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.os.Handler.handleCallback(Handler.java:605)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.os.Looper.loop(Looper.java:154)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at android.app.ActivityThread.main(ActivityThread.java:4945)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at java.lang.reflect.Method.invokeNative(Native Method)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at java.lang.reflect.Method.invoke(Method.java:511)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-23 15:30:40.749: E/AndroidRuntime(3098):     at dalvik.system.NativeStart.main(Native Method)

再次感谢。

您正在尝试将活动类型转换到界面。所以您得到了
ClassCastException
。检查您的
MainActivity
是否正在实现
onDataPass
接口。如果它实现了
onDataPass
接口,那么您的问题就解决了。希望它能起作用

更新答案:

更改
onClick()
,如下所示。您已经编写了
passData()
,但从未调用它将数据传递到
onDataPass()
这将100%解决您的问题

@Override
public void onClick(View v) {
 Str = "I ";
 passData(Str);
}

我不知道你为什么把事情弄得这么复杂。你为什么不这样做呢:

public void onClick(View v) {
    ((OnDataPass) CoreFragment.this.getActivity()).passData("I");
}
显然,当然,活动必须是:

public class ActivityThatIncludesCoreFragment implements OnDataPass {    
    ....
}

谢谢你Nagaraj436,它治好了车祸。我现在唯一的问题是onDataPass方法似乎从未被触发!!我认为我把它放在了正确的位置,即在onClickListener中,但是eclipse在它下面有一条弯曲的黄线,上面写着“类型new View.onClickListener(){}中的方法passData(String)从不在本地使用”。对不起,我看起来像个十足的白痴,但我该如何克服这一点呢。这让我快发疯了!!很抱歉不接受这个答案,但我希望最后一点能得到更多的帮助。我有一种感觉,当我接受Nagaraj436的答案时,人们不再看这个了。有人能帮我解决onDataPass方法不被解雇的问题吗?提前谢谢大家!!没有回应,所以回到回答。仍然卡住了,所以非常感谢任何帮助。@Gary检查我的更新答案,它肯定会起作用。如果它起作用,那么就投票给我答案。这是我刚刚想到的。CoreFragment是从另一个片段调用的(尽管此调用片段是永久性的,并且CoreFragment位于一个框架布局中,因为它将是许多可能使用的片段之一),这是否会影响我需要如何进行此操作?我的MainActivity实现OnDataPass,(但有一个问题,我必须从片段中导入它,我是否做错了什么?)。当我将您的行添加到OnClick处理程序时,我得到以下错误消息:-方法passData(String)未定义CoreFragment.OnDataPass类型。这是一个让我左右为难的问题!!感谢所有试图帮助我解决此问题的人。非常感谢!!!我刚刚想到了这一点。CoreFragment是从另一个片段调用的,(尽管此调用片段是永久性的,并且CoreFragment位于框架布局中,因为它将是许多可能使用的片段之一),这对我需要如何处理这件事有影响吗?谢谢你的帮助,我终于用TNR的解决方案让它工作了。它不工作的原因是我在我的主要活动中犯了一个愚蠢的、小学生级别的错误(羞愧地绞死了头)!!
public class ActivityThatIncludesCoreFragment implements OnDataPass {    
    ....
}