1

フラグメントとビューページャーを使用してタブ レイアウトを実装しました。ただし、5 番目のタブでは、ユーザーが 3 番目のタブにある Google マップのどこにいるかを共有したいと考えています。これは、「Facebook で共有」タブのコードです。

TabFour.java

public class TabFour extends Fragment {
private UiLifecycleHelper uiHelper;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.activity_tab_four, container, false);

    return rootView;
}

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

}

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

    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
        @Override
        public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
            Log.e("Activity", String.format("Error: %s", error.toString()));
        }

        @Override
        public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
            Log.i("Activity", "Success!");
        }
    });
}



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

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

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

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}
private Session.StatusCallback callback = new Session.StatusCallback() {


    @Override
    public void call(Session session, SessionState state,
            Exception exception) {
        // TODO Auto-generated method stub

    }
};

}

ただし、次の行にエラーがあります。

 uiHelper = new UiLifecycleHelper(this, callback);

そしてエラーは言う:

 The constructor UiLifecycleHelper(TabFour, Session.StatusCallback) is undefined

考えられる問題は何ですか?Facebook Developers の UiLifecycleHelper には他のメソッドはありません。助けてください。ありがとう!

4

4 に答える 4

0

On Facebook SDK 4.x UiLifecycleHelper is replaced with CallbackManager. To implement Facebook Share Dialog in a fragment now is easier:

1) OnCreateView in your fragment class:

 CallbackManager mCallbackManagerFacebook;

// Facebook Share
mCallbackManagerFacebook = CallbackManager.Factory.create();

2) In your app class:

// Facebook
FacebookSdk.sdkInitialize(getApplicationContext());

3) Override onActivityResult in your fragment class with:

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

            mCallbackManagerFacebook.onActivityResult(requestCode, resultCode, data);
 }

4) For example, you have a button that OnClickListener the user can share a photo:

ImageButton fbBtn = (ImageButton) v.findViewById(R.id.facebookHomeDetailButton);
        fbBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                mProgressBar.setSpinSpeed(10);
                mProgressBar.setVisibility(View.VISIBLE);
                mProgressBar.spin();

                if (ShareDialog.canShow(ShareLinkContent.class)) {

                    ParseFile fileObject = (ParseFile)mParseObjectsList.get(mPosition).get("thumbnail");

                    fileObject.getDataInBackground(new GetDataCallback() {
                        public void done(byte[] data, ParseException e) {
                            if (e == null) {
                                Log.d("test", "We've got data in data.");

                                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                                SharePhoto photo = new SharePhoto.Builder()
                                        .setBitmap(bitmap)
                                        .build();

                                SharePhotoContent content = new SharePhotoContent.Builder()
                                        .addPhoto(photo)
                                        .build();

                                mShareDialogFacebook.show(getActivity(), content);

                                mProgressBar.stopSpinning();
                                mProgressBar.setVisibility(View.INVISIBLE);


                            } else {

                                Log.d("test", "There was a problem downloading the data.");

                            }

                        }

                    });


                } else {

                    showDialogWithOk("¡Ooops!\nParece que no tienes Facebook instalado en tu dispositivo. Para compartir tendrías que instalar esta aplicación en tu dispositivo.\n¡Gracias!");

                }






            }
        });

5) That´s all. I hope that this code can help.

于 2015-07-03T09:42:38.863 に答える
0

これthisは、使用しているが、コンストラクターが必要とするアクティビティではなく、フラグメントを参照しているためです。(またはABSを使用している場合は、)に置き換えてみてthisくださいgetActivitygetSherlockActivity

于 2014-03-18T01:20:02.613 に答える
0

返信が遅れていることは承知していますが、これが他のすべての人に役立つことを願っています..フラグメントクラスでこれを呼び出します..

FragmentActivity activity=getActivity();

UiLifeCycleHelper コンストラクターで、「this」の代わりにアクティビティを渡すようになりました

uiHelper=new UiLifeCycleHelper(activity, CallBack);
于 2014-08-02T07:47:04.713 に答える