我基本上是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
这是什么问题?任何形式的帮助将不胜感激!
答案 0 :(得分:1)
您的Fragment
和Activity
似乎在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);
}
但你必须自己弄清bundle
和key
参数。
答案 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;
}