-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 Активность в App (фрагмент является активность, которая может существовать только на верхняя часть любой деятельности)

2.Pass this или ActivityName.this вместо getApplicatonContext() - обычно решает эту Ошибка

MainActivity не может быть приведен к android.app.Activity

Кроме того, что вы можете сделать, это сделать Fragment layout вместе с Fragment Class и добавить его в свой MainActivity макет XML.

Распространение Fragment Class на Fragment с использованием метода onCreateView.

И добавить свою Фрагмент макет Динамически here.For больше информации вы можете проверить мою Github repo showing Adding fragments with Java Dynamically

+0

Теперь я получаю сообщение об ошибке для 'getFragmentManager()', потому что я использую 'import android.app.Fragment;' Вы знаете, как разрешить этот –

+0

использовать getFragmentManager() в вашей транзакции MainActivity для фрагмента, как я сделал здесь 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

Теперь я получение ошибки для 'getFragmentManager()', потому что я использую 'import android.app.Fragment;' Вы знаете, как решить эту проблему. –

+0

Вы, кажется, не обновили свой код вообще, чтобы показать изменения, которые вы сделали , Моя единственная рекомендация на этом этапе - продолжить чтение документации и руководств Google по Android. Я добавил еще одну ссылку на мой пост. –

+0

@LukazsPioetrszci ссылка Я добавил состояния «Вы можете получить экземпляр FragmentTransaction из своей деятельности следующим образом: –

-1

Оформить заказ AndroidManifest.xml и удалить все сообщения о MainActivity!

Смежные вопросы