【发布时间】:2016-02-27 02:17:01
【问题描述】:
我决定将我的 MainActivity 类扩展为 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.
}
【问题讨论】:
标签: java android android-fragments android-fragmentactivity fragmenttransaction