-4

我决定把我的MainActivity类扩展到Fragment现在我的应用程序崩溃(甚至不负载 - 参见下面的堆栈跟踪)。的Android应用程序崩溃时,我已经将我MainActivity到碎片

这是我的代码:

public class MainActivity extends Fragment { 

Button login; 
EditText username; 
EditText password; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View view = inflater.inflate(R.layout.activity_main, container, false); 
    loginButtonOnClick(); 
    return view; 
} 

private void loginButtonOnClick(){ 
    Button loginButtons = (Button) getView().findViewById(R.id.loginButton); 
    loginButtons.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Fragment userPage = new UserPage(); 
      FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.mainGUI, userPage); 
      transaction.addToBackStack(null); 
      transaction.commit(); 
     } 
    }); 
} 

}

这是我xml文件:

这是堆栈跟踪:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{lukazs.newapps/lukazs.newapps.MainActivity}: java.lang.ClassCastException: lukazs.newapps.MainActivity cannot be cast to android.app.Activity 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
      at android.app.ActivityThread.access$600(ActivityThread.java:141) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:5103) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.ClassCastException: lukazs.newapps.MainActivity cannot be cast to android.app.Activity 
      at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
            at android.app.ActivityThread.access$600(ActivityThread.java:141) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
            at android.os.Handler.dispatchMessage(Handler.java:99) 
            at android.os.Looper.loop(Looper.java:137) 
            at android.app.ActivityThread.main(ActivityThread.java:5103) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
            at dalvik.system.NativeStart.main(Native Method) 

我要使用 这是我遇到严重困难的地方,我不能使用android.support.v4.app.Fragment,因为我无法从主要活动中调用此片段,因此我必须使用android.app.Fragment。问题是getFragmentManager属于android.support.v4.app.Fragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    View view = inflater.inflate(R.layout.dbusers, container, false); 
    viewPager = (ViewPager) getView().findViewById(R.id.pager); 
    viewPager.setAdapter(new TabsAdapter(getFragmentManager())); // getFragmentManager() can't be called. 
} 

回答

0

你应该记住以下两点:

1.There必须在应用中1个活动(片段是可以在只存在一个活动任何活动的顶部)

2.Pass thisActivityName.this,而不是getApplicatonContext() - 通常可以解决此错误

MainActivity不能转换到android.app.Activity

或者你可以做的是做一个Fragment layoutFragment Class一起,并将其添加到您的MainActivity XML布局。

onCreateView方法将Fragment Class扩大为Fragment

,并添加您片段布局动态here.For更多信息,你可以检查我的Github repo showing Adding fragments with Java Dynamically

+0

现在我得到'getFragmentManager()'的错误,因为我正在使用'import android.app.Fragment;'你知道如何解决这个 –

+0

在你的MainActivity中使用getFragmentManager() https://github.com/CandleCoder/FragmentWithJava/blob/master/app/src/main/java/com/magicsw/fragmentwithjava/MainActivity.java – CandleCoder

+0

请检查我的更新后的帖子。它是在底部的代码 –

0

Android官方文档中有一个简单的示例,你可以在这里看看:

http://developer.android.com/training/basics/fragments/creating.html

使用Download the Sample按钮来获取他们的整个样本。

这里是另一个链接:

http://developer.android.com/guide/components/fragments.html

摘要:

你MainActivity应该还是一个活动。在布局文件中,您有一个占位符为您的片段。

当您的活动启动并运行时,您将创建该片段并将其放入占位符中。

然后,有许多功能可以将不同的片段放入占位符中,并像活动一样向前和向后移动。

+0

现在我是因为我正在使用'import android.app.Fragment;''getFragmentManager()'获取错误您知道如何解决此问题 –

+0

您似乎没有更新过代码,以显示您所做的更改。我现在唯一的建议是继续阅读Google的android文档和指南。我添加了另一个链接到我的文章。 –

+0

@LukazsPioetrszci我添加的链接状态“你可以从你的活动中获得FragmentTransaction的一个实例,如下所示:” –

-1

检出您的AndroidManifest.xml并删除所有关于MainActivity的消息!

相关问题