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

Java 当我将MainActivity转换为Fragment时,Android应用程序崩溃,java,android,android-fragments,android-fragmentactivity,fragmenttransaction,Java,Android,Android Fragments,Android Fragmentactivity,Fragmenttransaction,我决定将我的MainActivity类扩展为片段,现在我的应用程序崩溃了(甚至没有加载-请参阅下面的堆栈跟踪) 这是我的代码: public class MainActivity extends Fragment { Button login; EditText username; EditText password; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle

我决定将我的
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
文件:

<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>
我必须使用 这就是我遇到严重困难的地方,我不能使用
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.
}

你应该记住这两点:

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

2.传递
活动名称。此
而不是
GetApplicationContext()
-通常解决此错误

MainActivity无法强制转换为android.app.Activity

或者,您可以创建一个
片段布局
及其
片段类
,并将其添加到MainActivityXML布局中

使用
onCreateView
方法将
Fragment类扩展到
Fragment


并在此处动态添加您的片段布局。有关更多信息,请查看我的官方Android文档中的一个简单示例,您可以在此处查看:

使用
下载样本
按钮获取整个样本

这里是另一个链接:

总结:

您的主要活动仍然应该是活动。在布局文件中,您有一个用于片段的占位符

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


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

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

现在我在
getFragmentManager()
中遇到一个错误,因为我正在使用
import android.app.Fragment你知道如何解决这个问题吗?像我在这里做的那样,在你的主要活动中使用getFragmentManager()处理片段事务。请查看我更新的帖子。这是底部的代码只需遵循我的github repo它非常简单,你可以很容易地解决你的问题…你需要理解正确的流程…你没有正确地理解它…现在我得到了
getFragmentManager()
的一个错误,因为我使用的是
import android.app.Fragment您知道如何解决此问题吗?您似乎根本没有更新代码以显示所做的更改。目前我唯一的建议是继续阅读谷歌的android文档和指南。我已经在我的帖子中添加了另一个链接。@LukazsPioetrszci我添加的链接声明“您可以从您的活动中获得FragmentTransaction的实例,如下所示:”
@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.
}