当我将MainActivity转换为Fragment时,Android应用程序崩溃了

时间:2016-02-27 02:17:02

标签: java android android-fragments android-fragmentactivity fragmenttransaction

我决定将Fragment类扩展为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

}

这是我的<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="textPassword" android:ems="10" android:id="@+id/password" android:layout_above="@+id/btnLogin" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/username" android:layout_above="@+id/passwordLogin" android:layout_marginBottom="81dp" android:layout_alignEnd="@+id/password" android:layout_alignStart="@+id/password" android:inputType="text" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/loginButtonName" android:id="@+id/loginButton" android:layout_centerHorizontal="true" android:focusable="true" /> <fragment android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/loginMain"/> </RelativeLayout> 文件:

 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. }

#scroll {
  width: 100%;
  height: 100%;
  overflow-y: hidden; /*this is the part of the code which make the scroll bar visable*/
  background-color: aqua;
  /*padding-right: 32px; /* uncomment to remove scrollbar by pushing 32 px right*/
}

3 个答案:

答案 0 :(得分:0)

你应该记住这两点:

1.应用程序中必须有1个活动。(片段是一个只存在于任何活动顶部的活动)

2.Pass thisActivityName.this代替getApplicatonContext() - 通常会解决此错误

  

MainActivity无法转换为android.app.Activity

或者您可以执行的操作是Fragment layout及其Fragment Class并将其添加到 MainActivity XML布局。

使用Fragment Class方法将Fragment扩展为onCreateView

并在此处动态添加片段布局。有关详情,请查看我的Github repo showing Adding fragments with Java Dynamically

答案 1 :(得分:0)

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

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

使用Download the Sample按钮获取整个样本。

这是另一个链接:

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

要点:

您的MainActivity仍应是一项活动。在布局文件中,您有片段的占位符。

当Activity启动并运行时,您可以创建片段并将其放入占位符。

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

答案 2 :(得分:-1)

检查AndroidManifest.xml并删除有关MainActivity的所有消息!