Autore Topic: Avviare un fragment da un'activity  (Letto 442 volte)

Offline Steve46

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
  • Sistema operativo:
    Mac OSX 10.9
Avviare un fragment da un'activity
« il: 28 Maggio 2014, 12:03:28 CEST »
0
Ciao a tutti, vi spiego la mia situazione:
sto realizzando un'app con un navigation drawer ed ognuna delle voci nel menu della barra laterale corrisponde ad un fragment, quindi con la sua classe e il suo xml.
Sto adesso realizzando il login (che è una delle voci del menu) ed infatti ho la mia classe LoginFragment, però da questo menù si accede ad un'altra activity nel caso in cui si debba fare la prima registrazione e poi nell'activity registrazione c'è un link per tornare al LoginFragment nel caso invece si sia già registrati.
Il problema sorge quando dall'activity registrazione voglio tornare indietro, perchè usando l'intent e startactivity() non funziona in quanto la pagina del login non è un'activity bensì un fragment.
Come posso risolvere?
Grazie!

Offline CrotaNexus

  • Utente normale
  • ***
  • Post: 156
  • Vuolsi così colà dove si puote ciò che si vuole
  • Respect: +25
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    SimoneDev
  • Sistema operativo:
    Windows 8.1
Re:Avviare un fragment da un'activity
« Risposta #1 il: 28 Maggio 2014, 15:41:40 CEST »
0
Ciao, come hai già detto non puoi utilizzare il metodo startActivity perchè la classe in questione non è un'Activity ma un Fragment. La soluzione al tuo problema potrebbe essere quella di utilizzare il replace.

Codice (Java): [Seleziona]
getFragmentManager().beginTransaction().replace(R.id.contenitore, new TuoFragment()).commit();
Dove R.id.contenitore è (nel mio caso) :

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
   
    <android.support.v4.widget.DrawerLayout
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/navDrawer"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
   
    <FrameLayout
       android:id="@+id/contenitore"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>
   
    <ListView
       android:id="@+id/listaDrawer"
       android:layout_width="240dp"
       android:layout_height="match_parent"
       android:layout_gravity="start"
       android:choiceMode="singleChoice"
       android:divider="@null"
       android:dividerHeight="0dp"
       android:background="@color/nav_drawer"/>
   
</android.support.v4.widget.DrawerLayout>


SimoneDev @ Google Play Store

Offline Steve46

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
  • Sistema operativo:
    Mac OSX 10.9
Re:Avviare un fragment da un\'activity
« Risposta #2 il: 28 Maggio 2014, 16:47:38 CEST »
0
Purtroppo non funziona...il contenitore quale dovrebbe essere? Perchè quello che tu hai scritto nell'xml corrisponde all'xml della mia main activity, mentre invece il fragment ha il suo xml ma non ha id.

Questo è il log:

Citazione
05-28 16:44:14.770: E/FragmentManager(30631): No view found for id 0x7f090001 (it.sii.android.sporting:id/frame_container) for fragment LoginFragment{429afe28 #0 id=0x7f090001}
05-28 16:44:14.770: E/FragmentManager(30631): Activity state:
05-28 16:44:14.770: E/FragmentManager(30631):   Local Activity 4298ca48 State:
05-28 16:44:14.770: E/FragmentManager(30631):     mResumed=true mStopped=false mFinished=false
05-28 16:44:14.770: E/FragmentManager(30631):     mLoadersStarted=true
05-28 16:44:14.770: E/FragmentManager(30631):     mChangingConfigurations=false
05-28 16:44:14.770: E/FragmentManager(30631):     mCurrentConfig={1.0 222mcc10mnc it_IT ldltr sw360dp w360dp h567dp 480dpi nrml port finger -keyb/v/h -nav/h s.340fontTypeIndex3}
05-28 16:44:14.770: E/FragmentManager(30631):   Active Fragments in 4298cb60:
05-28 16:44:14.770: E/FragmentManager(30631):     #0: LoginFragment{429afe28 #0 id=0x7f090001}
05-28 16:44:14.770: E/FragmentManager(30631):       mFragmentId=#7f090001 mContainerId=#7f090001 mTag=null
05-28 16:44:14.770: E/FragmentManager(30631):       mState=0 mIndex=0 mWho=android:fragment:0 mBackStackNesting=0
05-28 16:44:14.770: E/FragmentManager(30631):       mAdded=true mRemoving=false mResumed=false mFromLayout=false mInLayout=false
05-28 16:44:14.770: E/FragmentManager(30631):       mHidden=false mDetached=false mMenuVisible=true mHasMenu=false
05-28 16:44:14.770: E/FragmentManager(30631):       mRetainInstance=false mRetaining=false mUserVisibleHint=true
05-28 16:44:14.770: E/FragmentManager(30631):       mFragmentManager=FragmentManager{4298cb60 in RegistrazioneActivity{4298ca48}}
05-28 16:44:14.770: E/FragmentManager(30631):       mActivity=it.sii.android.sporting.RegistrazioneActivity@4298ca48
05-28 16:44:14.770: E/FragmentManager(30631):   Added Fragments:
05-28 16:44:14.770: E/FragmentManager(30631):     #0: LoginFragment{429afe28 #0 id=0x7f090001}
05-28 16:44:14.770: E/FragmentManager(30631):   FragmentManager misc state:
05-28 16:44:14.770: E/FragmentManager(30631):     mActivity=it.sii.android.sporting.RegistrazioneActivity@4298ca48
05-28 16:44:14.770: I/ViewRootImpl(30631): ViewRoot's Touch Event : Touch UP
05-28 16:44:14.780: E/FragmentManager(30631):     mContainer=android.app.Activity$1@4298cbd8
05-28 16:44:14.780: E/FragmentManager(30631):     mCurState=5 mStateSaved=false mDestroyed=false
05-28 16:44:14.780: E/FragmentManager(30631):   ViewRoot:
05-28 16:44:14.780: E/FragmentManager(30631):     mAdded=true mRemoved=false
05-28 16:44:14.790: E/FragmentManager(30631):     mConsumeBatchedInputScheduled=false
05-28 16:44:14.790: E/FragmentManager(30631):     mPendingInputEventCount=0
05-28 16:44:14.790: E/FragmentManager(30631):     mProcessInputEventsScheduled=false
05-28 16:44:14.790: E/FragmentManager(30631):     mTraversalScheduled=false
05-28 16:44:14.790: E/FragmentManager(30631):     android.view.ViewRootImpl$NativePreImeInputStage: mQueueLength=0
05-28 16:44:14.790: E/FragmentManager(30631):     android.view.ViewRootImpl$ImeInputStage: mQueueLength=0
05-28 16:44:14.790: E/FragmentManager(30631):     android.view.ViewRootImpl$NativePostImeInputStage: mQueueLength=0
05-28 16:44:14.790: E/FragmentManager(30631):   Choreographer:
05-28 16:44:14.790: E/FragmentManager(30631):     mFrameScheduled=false
05-28 16:44:14.790: E/FragmentManager(30631):     mLastFrameTime=293309991 (496 ms ago)
05-28 16:44:14.790: E/FragmentManager(30631):   View Hierarchy:
05-28 16:44:14.790: E/FragmentManager(30631):     com.android.internal.policy.impl.PhoneWindow$DecorView{4298d788 V.E..... R....... 0,0-1080,1776}
05-28 16:44:14.790: E/FragmentManager(30631):       com.android.internal.widget.ActionBarOverlayLayout{4298ddc8 V.ED.... ........ 0,0-1080,1776 #1020319 android:id/action_bar_overlay_layout}
05-28 16:44:14.790: E/FragmentManager(30631):         android.widget.FrameLayout{4298e9d8 V.E..... ........ 0,219-1080,1776 #1020002 android:id/content}
05-28 16:44:14.790: E/FragmentManager(30631):           android.widget.ScrollView{42995ed8 VFED.V.. ........ 0,0-1080,1557}
05-28 16:44:14.800: E/FragmentManager(30631):             android.widget.LinearLayout{42996c48 V.E..... ........ 0,0-1080,1343}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.TextView{42996f60 V.ED.... ........ 30,30-1050,131}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.TextView{42997660 V.ED.... ........ 30,161-1050,218}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.EditText{42997da8 VFED..CL .F...... 30,218-1050,335 #7f09000e app:id/registerName}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.TextView{42998fa0 V.ED.... ........ 30,335-1050,392}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.EditText{42999690 VFED..CL ........ 30,392-1050,509 #7f09000f app:id/registerEmail}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.TextView{4299a888 V.ED.... ........ 30,554-1050,611}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.EditText{4299af80 VFED..CL ........ 30,611-1050,728 #7f090010 app:id/registerPassword}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.TextView{4299c850 V.ED.... ........ 30,728-1050,845 #7f090011 app:id/register_error}
05-28 16:44:14.800: E/FragmentManager(30631):               android.widget.Button{4299cf40 VFED..C. ........ 30,905-1050,1049 #7f090012 app:id/btnRegister}
05-28 16:44:14.810: E/FragmentManager(30631):               
05-28 16:44:14.810: E/FragmentManager(30631): android.widget.Button{4299db30 VFED..C. ...P.... 30,1169-1050,1313 #7f090013 app:id/btnLinkToLoginScreen}
05-28 16:44:14.810: E/FragmentManager(30631):         com.android.internal.widget.ActionBarContainer{4298edd8 V.ED.... ........ 0,75-1080,219 #102031a android:id/action_bar_container}
05-28 16:44:14.810: E/FragmentManager(30631):           com.android.internal.widget.ActionBarView{4298f2e0 V.E..... ........ 0,0-1080,144 #102031b android:id/action_bar}
05-28 16:44:14.810: E/FragmentManager(30631):             android.widget.LinearLayout{4298f850 V.....C. ........ 25,0-714,144}
05-28 16:44:14.810: E/FragmentManager(30631):               com.android.internal.widget.ActionBarView$HomeView{429908f0 V.E..... ........ 0,0-120,144}
05-28 16:44:14.810: E/FragmentManager(30631):                 android.widget.ImageView{42990c88 G.ED.... ......I. 0,0-0,0 #102025b android:id/up}
05-28 16:44:14.810: E/FragmentManager(30631):                 android.widget.ImageView{42991030 V.ED.... ........ 12,24-108,120 #102002c android:id/home}
05-28 16:44:14.810: E/FragmentManager(30631):               android.widget.LinearLayout{42992478 V.E..... ........ 120,0-689,144}
05-28 16:44:14.810: E/FragmentManager(30631):                 android.widget.ImageView{42992790 G.ED.... ......I. 0,0-0,0 #102025b android:id/up}
05-28 16:44:14.810: E/FragmentManager(30631):                 
05-28 16:44:14.820: E/FragmentManager(30631): android.widget.LinearLayout{42992bf8 V.E..... ........ 0,36-545,108}
05-28 16:44:14.820: E/FragmentManager(30631):                   android.widget.TextView{42992f18 V.ED.... ........ 0,0-545,72 #1020267 android:id/action_bar_title}
05-28 16:44:14.820: E/FragmentManager(30631):                   android.widget.TextView{42994018 G.ED.... ......I. 0,0-0,0 #1020268 android:id/action_bar_subtitle}
05-28 16:44:14.820: E/FragmentManager(30631):             com.android.internal.view.menu.ActionMenuView{429a7e38 V.ED.... ......ID 1080,0-1080,144}
05-28 16:44:14.820: E/FragmentManager(30631):           com.android.internal.widget.ActionBarContextView{42994c20 G.E..... ......ID 0,0-0,0 #102031c android:id/action_context_bar}
05-28 16:44:14.820: E/FragmentManager(30631):         com.android.internal.widget.ActionBarContainer{429951f0 G.ED.... ......ID 0,0-0,0 #102031d android:id/split_action_bar}
05-28 16:44:14.820: E/FragmentManager(30631):   Looper (main, tid 1) {4287ecf8}
05-28 16:44:14.820: E/FragmentManager(30631):     Message 0: { when=-40ms callback=android.widget.Editor$Blink target=android.widget.Editor$Blink }
05-28 16:44:14.820: E/FragmentManager(30631):     Message 1: { when=+14ms callback=android.view.View$UnsetPressedState target=android.view.ViewRootImpl$ViewRootHandler }
05-28 16:44:14.820: E/FragmentManager(30631):     (Total messages: 2, idling=false, quitting=false)
05-28 16:44:14.820: D/AndroidRuntime(30631): Shutting down VM
05-28 16:44:14.820: W/dalvikvm(30631): threadid=1: thread exiting with uncaught exception (group=0x4181be48)
05-28 16:44:14.830: E/AndroidRuntime(30631): FATAL EXCEPTION: main
05-28 16:44:14.830: E/AndroidRuntime(30631): Process: it.sii.android.sporting, PID: 30631
05-28 16:44:14.830: E/AndroidRuntime(30631): java.lang.IllegalArgumentException: No view found for id 0x7f090001 (it.sii.android.sporting:id/frame_container) for fragment LoginFragment{429afe28 #0 id=0x7f090001}
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:883)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1063)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.BackStackRecord.run(BackStackRecord.java:684)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1450)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:444)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.os.Handler.handleCallback(Handler.java:733)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.os.Handler.dispatchMessage(Handler.java:95)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.os.Looper.loop(Looper.java:136)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at android.app.ActivityThread.main(ActivityThread.java:5105)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at java.lang.reflect.Method.invokeNative(Native Method)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at java.lang.reflect.Method.invoke(Method.java:515)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
05-28 16:44:14.830: E/AndroidRuntime(30631):    at dalvik.system.NativeStart.main(Native Method)

Post unito: 28 Maggio 2014, 17:16:48 CEST
Aggiornamento:
ho deciso di cambiare strada ed estendere le varie voci del menu con fragmentactivity e non solo fragment, in modo da poter gestire tutto meglio (o almeno spero)...adesso però il problema da risolvere è un'altro, infatti nella main activity devo risolvere questo problema in quanto non avendo più fragment ma fragmentactivity non posso usare il fragmentmanager per la lista del menu, come risolvo?
Qui il codice:

Codice (Java): [Seleziona]
private void displayView(int position) {
        // update the main content by replacing fragments
        FragmentActivity fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new AttivitaFragment();
            break;
        case 2:
            fragment = new CalendarioFragment();
            break;
        case 3:
            fragment = new PrenotazioniFragment();
            break;
        case 4:
            fragment = new LoginFragment();
            break;
 
        default:
            break;
        }
 
        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();

grazie!
« Ultima modifica: 28 Maggio 2014, 17:16:48 CEST da Steve46, Reason: Merged DoublePost »