Android - support.v4.Fragment

时间:2017-10-13 11:47:52

标签: android android-fragments

我阅读了有关如何将片段添加到活动的Android文档。它说要将一个片段添加到Activty我应该在Activity类中编写这个代码:

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

但这是针对android.app.Fragment类的。 对于android.support.v4.Fragment,文档说我应该调用getSupportFragmentManager()而不是getFragmentManager(),而Activity必须扩展FragmentActivty。 所以我做了这个改变,现在这是我的活动代码:

public class ExampleActivity extends AppCompactActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);

        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = 
        fragmentManager.beginTransaction();
        ExampleFragment fragment = new ExampleFragment();
        fragmentTransaction.add(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    }
}

AppCompactActivity是FragmentActivity的子类,因此我尊重约束。

问题是,如果我运行我的应用程序,我会收到此错误:

java.lang.RuntimeException: 
    com.myapplication.ExampleActivity@13388c6 must implement OnFragmentInteractionListener

我在Android doc web search上输入了OnFragmentInteractionListener,这就是我得到的: enter image description here

紧接下方有链接 https://developer.android.com/training/basics/fragments/communicating.html

它向我展示了片段之间的通信指南。它讲的是ListFragment,我并不关心它。

我非常困惑,因为每次我阅读文档时,总会有一些事情迫使我进行互联网搜索以找到解决方法或解决问题。

是否有人可以先解释我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

tutorial,您可以阅读以下内容:

  

为了从片段接收​​事件回调,活动   托管它必须实现片段中定义的接口   类。

因此,在您的Activity中使用您的片段中的类似内容实现它:

public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    ...

    public void onArticleSelected(int position) {
        // The user selected the headline of an article from the HeadlinesFragment
        // Do something here to display that article
    }
}

你为什么需要它?因为你强迫主持人活动用这样的东西来实现它:

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception
    try {
        mCallback = (OnHeadlineSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnHeadlineSelectedListener");
    }
}