片段添加导致我出错

时间:2016-05-02 06:05:55

标签: java android android-fragments

我试图找出当我尝试添加片段时突然出现错误的原因。

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>

3 个答案:

答案 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

这对于混合支持库和非支持库中的组件的程序非常常见