2013-07-22 2 views
-1

Я следил за учебником Android android, насколько я могу рассказать о линии для проверки подлинности входа. однако у меня возникают проблемы. Когда я hav elogge din мой «вы вошли в систему», фрагмент никогда не отображается. Я считаю, что это с методом showFragment. пожалуйста, найти его ниже:Android facebook tutorial - после того, как фрагмент входа не отображается

private void showFragment(int fragmentIndex, boolean addToBackStack) { 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction transaction = fm.beginTransaction(); 
    for (int i = 0; i < fragments.length; i++) { 
     if (i == fragmentIndex) { 
      transaction.show(fragments[i]); 
     } else { 
      transaction.hide(fragments[i]); 
     } 
    } 
    if (addToBackStack) { 
     transaction.addToBackStack(null); 
    } 
    transaction.commit(); 
} 

когда положить sys.out в нем, fragmentIndex также 0, и поэтому мой другой фрагмент никогда не отображается. Есть ли что-то очевидное, что мне не хватает? Любая помощь будет принята с благодарностью.

Вы можете найти остальную часть класса и XML просто закончит:

package com.example.social; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.UiLifecycleHelper; 



public class DashBoard extends FragmentActivity { 

private static final int SPLASH = 0; 
private static final int SELECTION = 1; 
private static final int FRAGMENT_COUNT = SELECTION + 1; 
private boolean isResumed = false; 

private Fragment[] fragments = new Fragment[FRAGMENT_COUNT]; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(this, callback); 
    uiHelper.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_dash_board); 

    FragmentManager fm = getSupportFragmentManager(); 
    fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment); 
    fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment); 

    FragmentTransaction transaction = fm.beginTransaction(); 
    for (int i = 0; i < fragments.length; i++) { 
     transaction.hide(fragments[i]); 
    } 
    transaction.commit(); 
} 

private void showFragment(int fragmentIndex, boolean addToBackStack) { 
    FragmentManager fm = getSupportFragmentManager(); 
    FragmentTransaction transaction = fm.beginTransaction(); 
    for (int i = 0; i < fragments.length; i++) { 
     if (i == fragmentIndex) { 
      transaction.show(fragments[i]); 
     } else { 
      transaction.hide(fragments[i]); 
     } 
    } 
    if (addToBackStack) { 
     transaction.addToBackStack(null); 
    } 
    transaction.commit(); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

public void facebookIntent(MenuItem item) { 
    startActivity(new Intent(this, Facebook.class)); 

} 

public void twitterIntent(MenuItem item) { 
    startActivity(new Intent(this, Twitter.class)); 

} 

public void dashboardIntent(MenuItem item) { 
    startActivity(new Intent(this, DashBoard.class)); 

} 

public void redditIntent(MenuItem item) { 
    startActivity(new Intent(this, Reddit.class)); 

} 

@Override 
public void onResume() { 
    super.onResume(); 
    isResumed = true; 
    uiHelper.onResume(); 

} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
    isResumed = false; 
} 

private void onSessionStateChange(Session session, SessionState state, 
     Exception exception) { 
    // Only make changes if the activity is visible 
    if (isResumed) { 
     FragmentManager manager = getSupportFragmentManager(); 
     // Get the number of entries in the back stack 
     int backStackSize = manager.getBackStackEntryCount(); 
     // Clear the back stack 
     for (int i = 0; i < backStackSize; i++) { 
      manager.popBackStack(); 
     } 
     if (state.isOpened()) { 
      // If the session state is open: 
      // Show the authenticated fragment 
      showFragment(SELECTION, false); 
     } else if (state.isClosed()) { 
      // If the session state is closed: 
      // Show the login fragment 
      showFragment(SPLASH, false); 
     } 
    } 
} 

@Override 
protected void onResumeFragments() { 
    super.onResumeFragments(); 
    Session session = Session.getActiveSession(); 

    if (session != null && session.isOpened()) { 
     // if the session is already open, 
     // try to show the selection fragment 
     showFragment(SELECTION, false); 
    } else { 
     // otherwise present the splash screen 
     // and ask the person to login. 
     showFragment(SPLASH, false); 
    } 
} 

private UiLifecycleHelper uiHelper; 
private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, 
      Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 

}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    tools:context=".DashBoard" > 

    <fragment 
     android:id="@+id/selectionFragment" 
     android:name="com.example.social.SelectionFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <fragment 
     android:id="@+id/splashFragment" 
     android:name="com.example.social.SplashFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 
+0

У кого-нибудь есть идея? – Programatt

+0

Еще один удар - вытащил мои волосы и снова начал работать, чтобы столкнуться с тем же вопросом. – Programatt

+0

Это кажется нерегулярной проблемой, поскольку я не могу найти ответьте еще там, где и это не получает ответа. Это почти наверняка то, что я сделал не так, поэтому я действительно буду пробовать любую обратную связь вообще. – Programatt

ответ

0

Эта нить старая, и я надеюсь, что вы решили эту проблему. Для всех, кто сталкивается с этой проблемой, убедитесь, что вы создали приложение facebook и включили собственный вход (который будет запрашивать пакет приложений, класс входа в систему и keyhash. См. Раздел № 4 от https://developers.facebook.com/docs/android/getting-started/

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