1

Android アプリのデフォルトのタブ + スワイプ テンプレートを使用しており、Facebook 統合を含めようとしています。私のアプリは次のようになります: MainActivity には 2 つのタブがあり、そのうちの 1 つのタブの内容には Facebook のログイン ボタンが含まれています。

ただし、Facebook Web サイトのチュートリアル(手順 6) には、アクティビティで使用するコードしか含まれていません。フラグメントにこれを実装するのに問題があります。最初のタブに対応するフラグメントの [ログイン] ボタンをクリックしたときにのみ、FB にログインして FB ユーザー データを取得したいと考えています。

フラグメントコードは次のとおりです。

    /**
 * A fragment representing a section of the app.
 */
public static class SectionFragment extends Fragment
{
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    public static final String ARG_SECTION_NUMBER = "section_number";

    public SectionFragment() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        if(getArguments().getInt(ARG_SECTION_NUMBER) == tabSection.FACEBOOK.ordinal())
        {
            View view = inflater.inflate(R.layout.fragment_facebook, container, false);

            Button loginButton = (Button) view.findViewById(R.id.login_button);

            loginButton.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    //login to Facebook on click
                }
            });

            return view;
        }
        else if(getArguments().getInt(ARG_SECTION_NUMBER) == tabSection.CONTACTS.ordinal())
        { 
            View view = inflater.inflate(R.layout.fragment_contacts, container, false);

            return view;
        }

        return null;
    }
}

Facebook のチュートリアル コードは次のとおりです。

package com.firstandroidapp;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.widget.TextView;
import com.facebook.*;
import com.facebook.model.*;

public class MainActivity extends Activity {

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

// start Facebook Login
Session.openActiveSession(this, true, new Session.StatusCallback() {

  // callback when session changes state
  @Override
  public void call(Session session, SessionState state, Exception exception) {
    if (session.isOpened()) {

      // make request to the /me API
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

        // callback after Graph API response with user object
        @Override
        public void onCompleted(GraphUser user, Response response) {
          if (user != null) {
            TextView welcome = (TextView) findViewById(R.id.welcome);
            welcome.setText("Hello " + user.getName() + "!");
          }
        }
      });
    }
  }
});
  }

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

}

これらのコールバック メソッドはすべて、フラグメントではなくアクティビティに対応しています。それらをフラグメントに入れ、ボタンクリックでのみ呼び出すのに助けが必要です。

4

1 に答える 1

2

このFacebook の例は、あなたが探しているものにより近いかもしれません。すでに定義されているものを使用するか、UserSettingsFragment自分で定義した LoginButton クラスと Fragment を使用できます。

于 2013-01-05T13:20:40.663 に答える