我决定将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*/
}
答案 0 :(得分:0)
你应该记住这两点:
1.应用程序中必须有1个活动。(片段是一个只存在于任何活动顶部的活动)
2.Pass this
或ActivityName.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的所有消息!