Commit bb53a46a by 宁斌

1、BaseFragmentActivity页面添加嵌套多层Fragment,Fragment某些情况下onActivityResult无法被回调问题

parent 6ec228e3
......@@ -394,7 +394,7 @@ public class TableActivity extends BaseFragmentActivity<TablePresenter> implemen
@Override
public void startMealStandActivity() {
startActivity(new Intent(this, MealStandActivity2.class));
startActivity(new Intent(this, MealStandActivity.class));
}
@Override
......
......@@ -6,21 +6,17 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.gingersoft.gsa.cloud.app.GsaCloudApplication;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineItemAllComponent;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineChildAllComponent;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.FineChildAllPresenter;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.base.DefaultAdapter;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineChildAllContract;
import java.util.ArrayList;
import java.util.List;
......@@ -64,7 +60,7 @@ public class FineChildAllFragment extends BaseFragment<FineChildAllPresenter> im
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerFineItemAllComponent //如找不到该类,请编译一下项目
DaggerFineChildAllComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
......
......@@ -7,10 +7,9 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineItemOneselfComponent;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineChildOneselfComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineChildOneselfContract;
import com.gingersoft.gsa.cloud.table.mvp.model.bean.SoldoutCtrFood;
import com.jess.arms.base.BaseFragment;
......@@ -57,7 +56,7 @@ public class FineChildOneselfFragment extends BaseFragment<FineChildOneselfPrese
@Override
public void setupFragmentComponent(@NonNull AppComponent appComponent) {
DaggerFineItemOneselfComponent //如找不到该类,请编译一下项目
DaggerFineChildOneselfComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.view(this)
......
......@@ -2,21 +2,26 @@ package com.gingersoft.gsa.cloud.table.mvp.ui.fragment.mealstand;
import android.content.Intent;
import android.os.Bundle;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewpager2.widget.ViewPager2;
import com.gingersoft.gsa.cloud.table.R;
import com.gingersoft.gsa.cloud.table.R2;
import com.gingersoft.gsa.cloud.table.di.component.DaggerFineComponent;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.FinePresenter;
import com.gingersoft.gsa.cloud.ui.widget.dialog.LoadingDialog;
import com.google.android.material.tabs.TabLayout;
import com.jess.arms.base.BaseFragment;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.table.mvp.contract.FineContract;
import com.gingersoft.gsa.cloud.table.mvp.presenter.mealstand.FinePresenter;
import com.gingersoft.gsa.cloud.table.R;
import butterknife.BindView;
import static com.jess.arms.utils.Preconditions.checkNotNull;
......@@ -36,6 +41,10 @@ import static com.jess.arms.utils.Preconditions.checkNotNull;
public class FineFragment extends BaseFragment<FinePresenter> implements FineContract.View {
@BindView(R2.id.tabLayout)
TabLayout tabLayout;
@BindView(R2.id.viewPager)
ViewPager2 viewPager;
public static FineFragment newInstance() {
FineFragment fragment = new FineFragment();
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
......
......@@ -17,16 +17,20 @@ package com.jess.arms.base;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.gyf.immersionbar.ImmersionBar;
import com.jess.arms.base.delegate.IActivity;
......@@ -41,6 +45,8 @@ import com.qmuiteam.qmui.arch.QMUIFragmentActivity;
import com.qmuiteam.qmui.util.QMUIDeviceHelper;
import com.trello.rxlifecycle2.android.ActivityEvent;
import java.util.List;
import javax.inject.Inject;
import butterknife.ButterKnife;
......@@ -165,6 +171,73 @@ public abstract class BaseFragmentActivity<P extends IPresenter> extends Fragmen
this.mPresenter = null;
}
/**
* 在Fragment中使用startActivityForResult之后,onActivityResult的调用是从activity中开始的(即会先调用activity中的onActivityResult)。
*
* 一.只嵌套了一层Fragment(比如activity中使用了viewPager,viewPager中添加了几个Fragment)
*
* 在这种情况下要注意几个点:
* 1.在Fragment中使用startActivityForResult的时候,不要使用getActivity().startActivityForResult,而是应该直接使startActivityForResult()。
* 2.如果activity中重写了onActivityResult,那么activity中的onActivityResult一定要加上super.onActivityResult(requestCode, resultCode, data)。
*
* 如果违反了上面两种情况,那么onActivityResult只能够传递到activity中的,无法传递到Fragment中的。
* 没有违反上面两种情况的前提下,可以直接在Fragment中使用startActivityForResult和onActivityResult,和在activity中使用的一样。
*
*
* 二.嵌套多层Fragment(比如activity中使用了viewPager,viewPager中添加了几个Fragment,即第一层Fragment。其中一个Fragment又使用了一个ViewPager,这个ViewPager又加入了几个Fragment,即第二层Fragment)
* 在这种情况下activity中的onActivityResult调用无法传到第二层Fragment中。自己动手丰衣足食,我们只有手动传了。
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FragmentManager fragmentManager = getSupportFragmentManager();
for (int indext = 0; indext < fragmentManager.getFragments().size(); indext++) {
/**
* 找到第一层Fragment
*/
Fragment fragment = fragmentManager.getFragments().get(indext);
if (fragment == null) {
Log.w(TAG, "Activity result no fragment exists for index: 0x"
+ Integer.toHexString(requestCode));
} else {
handleResult(fragment, requestCode, resultCode, data);
}
}
}
/**
* 递归调用,对所有的子Fragment生效
*
* @param fragment
* @param requestCode
* @param resultCode
* @param data
*/
private void handleResult(Fragment fragment, int requestCode, int resultCode, Intent data) {
/**
* 调用每个Fragment的onActivityResult
*/
fragment.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, "handleResult");
/**
* 找到第二层Fragment
*/
List<Fragment> childFragment = fragment.getChildFragmentManager().getFragments();
if (childFragment != null) {
for (Fragment f : childFragment) {
if (f != null) {
handleResult(f, requestCode, resultCode, data);
}
}
}
if (childFragment == null) {
Log.e(TAG, "handleResult childFragment == null");
}
}
@Override
public SupportActivityDelegate getSupportDelegate() {
return mDelegate;
......
......@@ -12,11 +12,7 @@ public interface DiscountConstact {
*/
byte DISCOUNT_TYPE = 0;
/**
* 會員優惠券類型
*/
byte MEMBER_COUPON_TYPE = 1;
/**
* 會員錢包券類型
*/
byte WALLET_COUPON_TYPE = 2;
byte WALLET_COUPON_TYPE = 1;
}
......@@ -37,7 +37,7 @@ public class YedpayCallbackImp implements YedpayCallback {
if (fragment != null) {
Uri uri2 = Uri.parse(uri);
Intent intent = new Intent(Intent.ACTION_VIEW, uri2);
fragment.getActivity().startActivityForResult(intent, YedpayConstant.CallRequestCode.SALE_REQUEST_CODE);
fragment.startActivityForResult(intent, YedpayConstant.CallRequestCode.SALE_REQUEST_CODE);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment