我试图找出当我尝试添加片段时突然出现错误的原因。
public class MainActivity extends Activity implements Communicator {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((int) R.layout.activity_main);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.add(R.id.fragA, new FragmentA());
//I get errors on each of the adds
ft.commit();
FragmentTransaction ft2 = getFragmentManager().beginTransaction();
ft2.add(R.id.fragB, new FragmentB());
ft2.commit();
FragmentTransaction ft3 = getFragmentManager().beginTransaction();
ft3.add(R.id.fragC, new FragmentC());
ft3.commit();
}
public void respond(String str) {
//I also get an error on the following line
((FragmentB)getFragmentManager().findFragmentById(R.id.fragB)).changeText(str);
}
}
只使用导入FragmentTransaction
,我还没有自己上课。
这是我的片段A代码:
public class FragmentA extends Fragment implements OnClickListener {
Button btn;
Communicator comm;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fraga, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.btn = (Button) getActivity().findViewById(R.id.buttonA);
this.btn.setOnClickListener(this);
this.comm = (Communicator) getActivity();
}
public void onClick(View v) {
this.comm.respond("Hello from Fragment A");
}
}
活动的xml,我不是百分百肯定是否会解决这个问题,但提高项目的API会有什么不同吗?
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tannerlangan.week11fragtalk.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:background="#ff83ff3e"
android:id="@+id/fragA"></RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_centerVertical="true"
android:layout_alignParentStart="true"
android:background="#ff71e7ff"
android:id="@+id/fragB"></RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:background="#ff6d9aff"
android:id="@+id/fragC"></RelativeLayout>
</RelativeLayout>
答案 0 :(得分:0)
尝试使用getSupportFragmentManager()而不是getFragmentManager()。 getSupportFragmentManager()用于API&lt; 14。
答案 1 :(得分:0)
在项目中检查您是否在FragmentA和MainActivity中导入了相同的Fragment类。您可能已在片段中导入 android.support.v4.app.Fragment ,而在MainActivity中,您可能已导入 android.app.Fragment 。
如果你是minSdk是&lt; 14使用片段,片段管理器等来自支持库(即android.support.v4.app.fragment和片段管理器相同),否则只需导入标准片段类(即android。 app.Fragment)。
P.S :如果您在问题中提供错误,那将非常有用。
答案 2 :(得分:0)
您的片段可能使用ndroid.support.v4.app.Fragment
代替android.app.Fragment
。快速解决方法是将片段的签名更改为以下内容:
public class FragmentA extends android.app.Fragment implements OnClickListener
这对于混合支持库和非支持库中的组件的程序非常常见