2016-04-04 13 views
0

は私がFacebook経由の接続にフラグメントを作った、のコードはここにある:私は私の主な活動は、使用してから、このフラグメントを「コール」にしようとしていますFragmentTransaction.add():間違ったフラグメントタイプ

import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.facebook.AccessToken; 
import com.facebook.AccessTokenTracker; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.Profile; 
import com.facebook.ProfileTracker; 
import com.facebook.login.LoginResult; 
import com.facebook.login.widget.LoginButton; 

public class LoginFragment extends Fragment 
{ 
    private TextView mTextDetails; 
    private CallbackManager fbCallbackManager; 
    private AccessTokenTracker tTracker; 
    private ProfileTracker pTracker; 


    private FacebookCallback<LoginResult> fbCallback = new FacebookCallback<LoginResult>() 
    { 
     @Override 
     public void onSuccess(LoginResult loginResult) 
     { 
      AccessToken accessToken = loginResult.getAccessToken(); 
      Profile profile = Profile.getCurrentProfile(); 
     } 

     @Override 
     public void onCancel() 
     { 

     } 

     @Override 
     public void onError(FacebookException error) 
     { 

     } 
    }; 

    public LoginFragment() 
    { 

    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
     fbCallbackManager = CallbackManager.Factory.create(); 
     setupTokenTracker(); 
     setupProfileTracker(); 

     tTracker.startTracking(); 
     pTracker.startTracking(); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     return inflater.inflate(R.layout.fragment_main, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) 
    { 
     super.onViewCreated(view, savedInstanceState); 
     setTextDetails(view); 
     setupFBLoginButton(view); 
    } 

    @Override 
    public void onResume() 
    { 
     super.onResume(); 
     Profile profile = Profile.getCurrentProfile(); 
    } 

    @Override 
    public void onStop() 
    { 
     super.onStop(); 
     tTracker.stopTracking(); 
     pTracker.stopTracking(); 
    } 

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



    private void setupFBLoginButton(View view) 
    { 
     LoginButton loginButton = (LoginButton) view.findViewById(R.id.login_button); 
     loginButton.setReadPermissions("user_friends"); 
     loginButton.setFragment(this); 
     loginButton.registerCallback(fbCallbackManager, fbCallback); 
    } 

    private void setTextDetails(View view) 
    { 
     mTextDetails = (TextView) view.findViewById(R.id.text_details); 
    } 

    private void setupTokenTracker() 
    { 
     tTracker= new AccessTokenTracker() 
     { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) 
      { 
       //TODO 
      } 
     }; 
    } 

    private void setupProfileTracker() 
    { 
     pTracker = new ProfileTracker() 
     { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) 
      { 
       //TODO 
      } 
     }; 
    } 


} 

次のコード:

import android.app.FragmentManager; 
import android.app.FragmentTransaction; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity 
{ 

    private boolean logged = false; 
    private LoginFragment loginFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     FragmentManager fManager = getFragmentManager(); 
     FragmentTransaction fTransaction = fManager.beginTransaction(); 

     LoginFragment loginFragment = new LoginFragment(); 

     fTransaction.add(R.id.fragment_container, loginFragment, "fragment_container"); 
     fTransaction.commit(); 

     setContentView(R.layout.activity_main); 
    } 


} 

はまだありませんが、私はこのラインfTransaction.add(R.id.fragment_container, loginFragment, "fragment_container");の第二引数にエラーが発生しています。

私のIDEは、android.app.Fragmentオブジェクトを期待していると私に伝えています。私はmy.package.LoginFragmentです。

LoginFragmentFragment拡張私の

私はそれを得ることはありませんが、...私はまたandroid.support.v4.*ですべてを渡そうとしましたが、その後、私はloginButton.setFragment(this);を行うことができない、と私は設定する方法については考えていますLoggingボタンへのフラグメント。

+0

check LoginFragment.java:import android.support.v4.app.Fragment;あなたのフラグメントはサポートライブラリのバージョンですので、packSMapManagerを取得するためにgetSupportFragmentManager()を使用してください。 –

答えて

2

getFragmentManager()の代わりにサポートフラグメントを使用する場合は、getSupportFragmentManager()を使用してください。

さらに、setContentView()の後にフラグメントを追加すると、fragment_containerが見つかります。

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    loginFragment = new LoginFragment(); 
    getSupportFragmentManager() 
      .beginTransaction() 
      .add(R.id.fragment_container, loginFragment, "fragment_container") 
      .commit(); 
} 

この後、いくつかのインポートを修正する必要があります。 MainActivityに以下を使用してください。

import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
+0

@EddaSnorraコードに潜在的な修正が1つ含まれています。 onCreate()で 'LoginFragment'を指定したように見えるクラスフィールド' LoginFragment'があります。 –