(8)調用Fragment自身的startActivityForResult並在Fragment中接收返回結果

步驟歸納

  • Fragment跳轉時直接調用startActivityForResult()方法,前面無需添加getActivity()
 Intent intent = new Intent(getActivity(), ContentActivity.class);
 startActivityForResult(intent, REQUEST_CODE);
  • Activity中設置返回標誌並傳參
  Intent intent = new Intent(ContentActivity.this, MainActivity.class);
  intent.putExtra("test", 111);
  setResult(RESULT_OK, intent);
  finish();
  • Fragment中處理返回結果
 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            if (resultCode != RESULT_OK) {
                return;
            }
            if (data != null) {
                /**
                 * 取參
                 * */
                int param = data.getIntExtra("test", 0);
                Log.i(TAG, "onActivityResult: param:" + param);
            }
            Log.i(TAG, "onActivityResult: resultCode" + resultCode + ",requestCode:" + requestCode);
            //do something
        }
    }

一個小例子

流程:MainActivity包含一個ContentFragment,點擊ContentFragment中的按鈕,調用startActivityForResult方法跳轉到ContentActivity,然後點擊ContentActivity中的返回按鈕,執行setResult方法

代碼:
MainActivity
package com.xzy.fragmentbasicdemo;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;

import com.xzy.fragmentbasicdemo.fragment.ContentFragment;

/**
 * 測試fragment的一些用法:
 * 1.startActivityForResult用法
 */
public class MainActivity extends FragmentActivity {

    private ContentFragment mContentFragment;

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

        FragmentManager fm = getSupportFragmentManager();
        /**
         * 在activity_main的根佈局添加ID屬性,值爲id_fragment_container
         * */
        mContentFragment = (ContentFragment) fm.findFragmentById(R.id.id_fragment_container);
        if (mContentFragment == null) {
            mContentFragment = new ContentFragment();
            fm.beginTransaction().replace(R.id.id_fragment_container, mContentFragment).commit();
        }

    }
}

ContentFragment
package com.xzy.fragmentbasicdemo.fragment;


import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.xzy.fragmentbasicdemo.ContentActivity;
import com.xzy.fragmentbasicdemo.R;

import static android.app.Activity.RESULT_OK;

/**
 * A simple {@link Fragment} subclass.
 */
public class ContentFragment extends Fragment {
    private static final String TAG = "ContentFragment";

    private static final int REQUEST_CODE = 0x11;


    public ContentFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_content, container, false);
        Button button = view.findViewById(R.id.btn_test);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), ContentActivity.class);
                startActivityForResult(intent, REQUEST_CODE);
            }
        });

        return view;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE) {
            if (resultCode != RESULT_OK) {
                return;
            }
            if (data != null) {
                /**
                 * 取參
                 * */
                int param = data.getIntExtra("test", 0);
                Log.i(TAG, "onActivityResult: param:" + param);
            }
            Log.i(TAG, "onActivityResult: resultCode" + resultCode + ",requestCode:" + requestCode);
            //do something
        }
    }
}
ContentActivity
package com.xzy.fragmentbasicdemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class ContentActivity extends AppCompatActivity {
    private static final String TAG = "ContentActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_content);
        Button button = findViewById(R.id.btn_back);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ContentActivity.this, MainActivity.class);
                intent.putExtra("test", 111);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

    }

}

參考文章


  • http://blog.csdn.net/noobzsb/article/details/70312365#comments





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章