Android getFragmentById返回null
我以前从未使用过片段,但现在我有一个PlayerStatus片段,我想在两种不同的活动中使用它。它显示玩家状态:Android getFragmentById返回null,android,android-fragments,null,Android,Android Fragments,Null,我以前从未使用过片段,但现在我有一个PlayerStatus片段,我想在两种不同的活动中使用它。它显示玩家状态: public class PlayerStatus extends Fragment { Player player; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflat
public class PlayerStatus extends Fragment {
Player player;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.player_status, container, false);
return view;
}
public void setPlayer(Player player) {
this.player = player;
}
}
Fragment的布局如下所示:
<?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:layout_weight="1"
android:orientation="vertical"
android:paddingTop="0dp" >
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
layout="@layout/money" />
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
layout="@layout/wins" />
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
layout="@layout/level" />
</LinearLayout>
fPlayerStatus始终返回null。
我做错了什么 您的片段尚未添加到活动中的
FragmentManager
。
首先使用beginTransaction()执行FragmentTransaction
。在getFragmentManager()上添加(…)
。
不要忘了commit()
it.阅读有关如何启动片段、从活动附加/分离、commit()的作用以及使用片段时应该知道的基本函数
浏览这些网站,你肯定会很容易地找到这些片段
要使片段在此处工作,您必须执行以下操作:
1.将片段添加到活动中
写下
FragmentManager fragmentManager = getFragmentManager()
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.YOUR_FRAGMENT_ID_AS_DEFINED_IN_XML , object of your fragment class)
fragmentTransaction.commit();
结束----------------------------------
在FragmentTransaction的API中还有许多其他有用的方法,通过上面的链接阅读它们,您将很容易使用它们
让我知道它是否有用。我认为你不能用一个片段来完成两个活动。
我认为你的方法应该是
第一步
在活动\u主目录中创建两个片段布局
步骤2
然后在下面的活动中使用片段管理器
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frame,fragment)
fragmentTransaction.commit();
但我认为(因为这个:)当我在xml中添加片段时,它应该由系统实例化?不,这是片段最好的部分,它们之所以被使用是因为它们是可重用的,您可以在两个不同的活动中很好地使用片段,不会出现任何问题,因为您创建了两个不同的对象,并将这两个对象传递给两个不同的活动。谢谢!这很有帮助-现在我有了IllegalArgumentException,而不是NPE:)我已经阅读了好几次这些文章,我想通过XMLLayout=>(如developer.android.com/guide/components/fragments.html中所述)静态添加片段“当系统创建此活动布局时,它实例化布局中指定的每个片段,并为每个片段调用onCreateView()方法,以检索每个片段的布局。系统直接插入片段返回的视图来代替元素。”所以我认为我不必使用fragmentTransactions(和framelayout)但是现在-使用fragmentTransactions-我应该使用frameLayout,是吗?你是指xml文件中定义片段的主布局。不,你可以使用任何布局,不管是12-13 16:12:46.919:E/AndroidRuntime(12501):java.lang.RuntimeException:无法恢复活动{app.lws/app.lws.ui.game.GameActivity}:java.lang.IllegalArgumentException:fragment PlayerStatus的id 0x7f040065(app.lws:id/fPlayerStatus)找不到任何视图fragment PlayerStatus fragment{42ed1c48#0 id=0x7f040065 fPlayerStatus}我对您的代码做了一些更改,fragment具有唯一的id和唯一的标记。我在onCreate和onResume中设置了contentview,但是……请帮助我,出了什么问题?
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.frame,fragment)
fragmentTransaction.commit();