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