无法启动活动(包含片段间通信)

时间:2015-08-04 10:10:16

标签: java android xml android-fragments

我基本上是Android开发新手。根据官方API指南,从各种YouTube频道和ufcourse学习。

我目前正在学习片段,并找到了类似需求的视频。 Here是指向它的链接。

我基本上做的是制作两个片段,一个片段( private static Dictionary<string, CompiledCode> compiledCode = new Dictionary<string, CompiledCode>(); // Method public void LoadScript(string Name) { if (compiledCode.ContainsKey(Name)) { compiledCode[Name].Execute(scriptScope); } else { ScriptSource source = IronPythonScriptHost.Singleton.GetScriptSource(Name); CompiledCode code = source.Compile(); compiledCode.Add(Name, code); code.Execute(scriptScope); // Use an instanced ScriptScope } } )包含一个简单的FragmentA,当我点击List项时,相应的内容应该是显示在下面的片段中: ListView

我已经按照tutuorial中显示的所有步骤进行了操作,但仍然在运行时我收到以下错误:

FragmentB

以下是我的其余代码:

1)MainActivity.java:http://pastebin.com/6r2a15AN

2)FragmentA.java:http://pastebin.com/UMDMKWVi

3)FragmentB.java:http://pastebin.com/i5q1pHdq

4)Communicator.java:http://pastebin.com/fw0HbQa7

5)strings.xml:http://pastebin.com/Q0Qb7D6n

6)activity_main.xml:http://pastebin.com/8mw2cEHs

7)fragment_a.xml:http://pastebin.com/mq7RmSLe

8)fragment_b.xml:http://pastebin.com/Px90HWLN

9)AndroidManifest.xml:http://pastebin.com/bX71e80s

这是什么问题?任何形式的帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您的FragmentActivity似乎在com.example.abhishek.fragmentmodularui个包中。在activity_main.xml中,两个片段名称都指向不存在的文件:

android:name="com.example.abhishek.fragments.FragmentA"

这应该是

   android:name="com.example.abhishek.fragmentmodularui.FragmentA"

   android:name="com.example.abhishek.fragmentmodularui.FragmentB"

此外,respond()方法的实现是错误的。如下所示,以供参考。

public void respond(int i) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentB fragmentB = new FragmentB(); //This is WRONG
    fragmentB.changeData(i);
}

在这里,你不应该像你一样创建一个新的片段,因为它们是在Activity启动时创建的。现在发生了什么新片段已创建但未初始化,因此您会看到错误。您应该从FragmentManager获取现有片段。正确的方法是

public void respond(int i) {
    FragmentManager fragmentManager = getFragmentManager();
    FragmentB fragmentB = (FragmentB) getFragmentManager().findFragmentById(R.id.fragment2);
    fragmentB.changeData(i);
}

但你必须自己弄清bundlekey参数。

答案 1 :(得分:0)

Buddy有些事情你做错了如果你从android开发者网站学习一些细节会更好 http://developer.android.com/training/basics/fragments/fragment-ui.html 有下载链接下载示例项目研究 你做错了这个

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        communicator = (Communicator)getActivity();
        listView = (ListView)getActivity().findViewById(R.id.listView);
        ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(getActivity(),R.array.titles,android.R.layout.simple_list_item_1);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(this);

    }

你应该这样做

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_a,container,false);
listView = (ListView)view.findViewById(R.id.listView);
        ArrayAdapter arrayAdapter = ArrayAdapter.createFromResource(getActivity(),R.array.titles,android.R.layout.simple_list_item_1);
        listView.setAdapter(arrayAdapter);
        listView.setOnItemClickListener(this);
        return view;
    }