尝试从片段移动到其他片段时退出程序,未捕获异常

时间:2014-01-17 21:24:05

标签: android android-fragments

我尝试使用代码打开片段中的其他片段:

btnRegister.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        register();
    }
});

private void register(){
    ....
    Intent i = new Intent(getActivity(), LoginFragment.class);
    startActivity(i);
}

任何人都知道为什么我的应用停止工作?

运行时异常错误: 无法实例化活动ComponentInfo {com.bakalauras.rtaujenis / com.bakalauras.rtaujenis.LoginFragment}:java.lang.ClassCastException:com.bakalauras.rtaujenis.LoginFragment无法强制转换为android.app.Activity

我这样做因为我发现示例http://developer.android.com/guide/components/fragments.html#Example在最后一行else语句中查找TitlesFragment类。

3 个答案:

答案 0 :(得分:1)

从您的课程名称开始,这是我们唯一看到的内容,因为几乎没有代码,您似乎尝试使用Fragment加载Intent。这种机制是Activities用来互相启动的机制。动态添加Fragments需要您使用FragmentTransaction中的FragmentManager

如果LoginFragment实际上是Activity,我们需要查看更多代码。

如果LoginFragmentFragment,请阅读Android guide for using Fragments

答案 1 :(得分:1)

它正在崩溃,因为您正在尝试使用startActivity函数启动片段。

这不是片段的使用方式。您可以将Activity视为应用程序的窗口,将Fragments视为该应用程序的各个部分,因此,如果您尝试从一个片段更改为另一个片段,则需要使用FragmentTransaction

android.support.v4.app.FragmentManager fragmentManager1 = getSupportFragmentManager();
FragmentTransaction fragmentTransaction1 = fragmentManager1.beginTransaction();
fragmentTransaction1.replace(R.id.container, LoginFragment);
fragmentTransaction1.commit();

其中R.id.container是包含原始视图的框架,并将“换行”新视图。

查看this tutorial以了解如何使用片段。另请查看官方文档片段以了解Fragments的生命周期,因为它们与活动不同

答案 2 :(得分:0)

尝试此代码示例。

private void register(){
        // Create new fragment and transaction
        Fragment newFragment = new LoginFragment(); 

        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack

        transaction.replace(R.id.fragment_container, newFragment);
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit(); 
    }