步驟歸納
- 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
}
}
}
ContentActivitypackage 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