-4

我決定把我的MainActivity類擴展到Fragment現在我的應用程序崩潰(甚至不負載 - 參見下面的堆棧跟蹤)。的Android應用程序崩潰時,我已經將我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文件:

這是堆棧跟蹤:

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

回答

0

你應該記住以下兩點:

1.There必須在應用中1個活動(片段是可以在只存在一個活動任何活動的頂部)

2.Pass thisActivityName.this,而不是getApplicatonContext() - 通常可以解決此錯誤

MainActivity不能轉換到android.app.Activity

或者你可以做的是做一個Fragment layoutFragment Class一起,並將其添加到您的MainActivity XML佈局。

onCreateView方法將Fragment Class擴大爲Fragment

,並添加您片段佈局動態here.For更多信息,你可以檢查我的Github repo showing Adding fragments with Java Dynamically

+0

現在我得到'getFragmentManager()'的錯誤,因爲我正在使用'import android.app.Fragment;'你知道如何解決這個 –

+0

在你的MainActivity中使用getFragmentManager() https://github.com/CandleCoder/FragmentWithJava/blob/master/app/src/main/java/com/magicsw/fragmentwithjava/MainActivity.java – CandleCoder

+0

請檢查我的更新後的帖子。它是在底部的代碼 –

0

Android官方文檔中有一個簡單的示例,你可以在這裏看看:

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

使用Download the Sample按鈕來獲取他們的整個樣本。

這裏是另一個鏈接:

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

摘要:

你MainActivity應該還是一個活動。在佈局文件中,您有一個佔位符爲您的片段。

當您的活動啓動並運行時,您將創建該片段並將其放入佔位符中。

然後,有許多功能可以將不同的片段放入佔位符中,並像活動一樣向前和向後移動。

+0

現在我是因爲我正在使用'import android.app.Fragment;''getFragmentManager()'獲取錯誤您知道如何解決此問題 –

+0

您似乎沒有更新過代碼,以顯示您所做的更改。我現在唯一的建議是繼續閱讀Google的android文檔和指南。我添加了另一個鏈接到我的文章。 –

+0

@LukazsPioetrszci我添加的鏈接狀態「你可以從你的活動中獲得FragmentTransaction的一個實例,如下所示:」 –

-1

檢出您的AndroidManifest.xml並刪除所有關於MainActivity的消息!

相關問題