Skip to content

Commit

Permalink
XPageFragment增加获取同级fragment的方法
Browse files Browse the repository at this point in the history
  • Loading branch information
xuexiangjys committed Aug 27, 2023
1 parent 9bf4bff commit e4808e4
Show file tree
Hide file tree
Showing 6 changed files with 83 additions and 27 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
/build
/captures
.externalNativeBuild
/.idea/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
*/
public class MyApplication extends Application {


@Override
public void onCreate() {
super.onCreate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.xuexiang.xpage.logger.PageLog;
import com.xuexiang.xpage.utils.TitleBar;
import com.xuexiang.xpagedemo.databinding.FragmentTestBinding;
import com.xuexiang.xutil.tip.ToastUtils;

/**
* @author xuexiang
Expand Down Expand Up @@ -43,6 +44,16 @@ protected View onCreateContentView(@NonNull LayoutInflater inflater, @Nullable V
protected void initViews() {
binding.tvContent.setText("这里是 " + getPageName() + " 页面");
mData = (int) (Math.random() * 1000);

binding.button.setVisibility(View.VISIBLE);
binding.button.setOnClickListener(v -> {
TabBFragment tabBFragment = getPage(TabBFragment.class);
if (tabBFragment != null) {
ToastUtils.toast(tabBFragment.getData());
} else {
ToastUtils.toast("页面还未加载!");
}
});
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.xuexiang.xpage.logger.PageLog;
import com.xuexiang.xpage.utils.TitleBar;
import com.xuexiang.xpagedemo.databinding.FragmentTestBinding;
import com.xuexiang.xutil.tip.ToastUtils;

/**
* @author xuexiang
Expand Down Expand Up @@ -44,6 +45,16 @@ protected void initViews() {
binding.tvContent.setText("这里是 " + getPageName() + " 页面");

mData = (int) (Math.random() * 1000);

binding.button.setVisibility(View.VISIBLE);
binding.button.setOnClickListener(v -> {
TabAFragment tabAFragment = getPage(TabAFragment.class);
if (tabAFragment != null) {
ToastUtils.toast(tabAFragment.getData());
} else {
ToastUtils.toast("页面还未加载!");
}
});
}

/**
Expand Down
8 changes: 8 additions & 0 deletions app/src/main/res/layout/fragment_test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,12 @@
android:gravity="center"
tools:text="测试" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="获取数据"
android:visibility="gone" />

</LinearLayout>
78 changes: 52 additions & 26 deletions xpage-lib/src/main/java/com/xuexiang/xpage/base/XPageFragment.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.xuexiang.xpage.base;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
Expand Down Expand Up @@ -37,6 +38,10 @@
* @since 2018/5/24 下午3:49
*/
public abstract class XPageFragment extends Fragment {
/**
* 根布局
*/
protected View mRootView;
/**
* 所在activity
*/
Expand All @@ -57,10 +62,6 @@ public abstract class XPageFragment extends Fragment {
* 页面跳转返回的监听接口
*/
private OnFragmentFinishListener mFragmentFinishListener;
/**
* 根布局
*/
protected View mRootView;
/**
* 标题布局
*/
Expand Down Expand Up @@ -171,11 +172,6 @@ public void onFragmentDataReset(Bundle bundle) {

}


public interface PopCallback {
void run();
}

/**
* 用于openPageForResult,获得返回内容后需要再次调openPage的场景,只适合不新开Activity的情况,如果新开activity请像Activity返回结果那样操作
*
Expand Down Expand Up @@ -241,14 +237,6 @@ public CoreSwitcher getSwitcher() {
return mPageCoreSwitcher;
}

@Nullable
public Context getAttachContext() {
if (mAttachContext != null) {
return mAttachContext.get();
}
return null;
}

/**
* 设置Switcher
*
Expand All @@ -259,6 +247,14 @@ public XPageFragment setSwitcher(CoreSwitcher pageCoreSwitcher) {
return this;
}

@Nullable
public Context getAttachContext() {
if (mAttachContext != null) {
return mAttachContext.get();
}
return null;
}

/**
* 查找fragment是否存在,通过Switcher查找
*
Expand All @@ -277,7 +273,34 @@ public boolean findPage(String pageName) {
PageLog.d("pageSwitch is null");
return false;
}
}

/**
* 根据页面的类获取XPageFragment
*
* @return 获取的页面
*/
public <T extends XPageFragment> T getPage(Class<T> clazz) {
XPageActivity parent = getParentActivity();
return parent.getPage(clazz);
}

/**
* 根据页面的名称获取XPageFragment
*
* @return 获取的页面
*/
public XPageFragment getPageByName(String pageName) {
XPageActivity parent = getParentActivity();
return parent.getPageByName(pageName);
}

public XPageActivity getParentActivity() {
Activity activity = getActivity();
if (activity instanceof XPageActivity) {
return (XPageActivity) activity;
}
return null;
}

/**
Expand Down Expand Up @@ -308,8 +331,6 @@ public void onFragmentResult(int requestCode, int resultCode, Intent data) {
PageLog.d("onFragmentResult from baseFragment:requestCode-" + requestCode + " resultCode-" + resultCode);
}

//====================openPage=========================//

/**
* 打开fragment[使用注解反射]
*
Expand All @@ -319,6 +340,8 @@ public <T extends XPageFragment> T openPage(Class<T> clazz) {
return (T) openPage(PageConfig.getPageInfo(clazz).getName(), null, PageConfig.getPageInfo(clazz).getAnim());
}

//====================openPage=========================//

/**
* 打开fragment[使用注解反射]
*
Expand Down Expand Up @@ -362,7 +385,6 @@ public Fragment openPage(String pageName) {
return openPage(pageName, null, CoreAnim.slide);
}


/**
* 打开fragment
*
Expand All @@ -389,7 +411,7 @@ public final Fragment openPage(String pageName, Bundle bundle, CoreAnim coreAnim
/**
* 在当前activity中打开一个fragment,并设置是否添加到返回栈
*
* @param pageName Fragemnt 名,在page.json中配置。
* @param pageName Fragment 名,在page.json中配置。
* @param bundle 页面跳转时传递的参数
* @param anim 指定的动画理性 none/slide(左右平移)/present(由下向上)/fade(fade 动画)
* @param addToBackStack 是否添加到用户操作栈中
Expand Down Expand Up @@ -427,7 +449,7 @@ public final Fragment openPage(String pageName, Bundle bundle, int[] anim, boole
/**
* 在当前activity中打开一个fragment,并添加到返回栈中
*
* @param pageName Fragemnt 名,在page.json中配置。
* @param pageName Fragment 名,在page.json中配置。
* @param bundle 页面跳转时传递的参数
* @param anim 指定的动画理性 none/slide(左右平移)/present(由下向上)/fade(fade 动画)
* @return 打开的fragment对象
Expand All @@ -439,7 +461,7 @@ public final Fragment openPage(String pageName, Bundle bundle, int[] anim) {
/**
* 在当前activity中打开一个fragment,并设置是否添加到返回栈
*
* @param pageName Fragemnt 名,在page.json中配置。
* @param pageName Fragment 名,在page.json中配置。
* @param bundle 页面跳转时传递的参数
* @param coreAnim 指定的动画理性 none/slide(左右平移)/present(由下向上)/fade(fade 动画)
* @param addToBackStack 是否添加到用户操作栈中
Expand All @@ -452,7 +474,7 @@ public final Fragment openPage(String pageName, Bundle bundle, CoreAnim coreAnim
/**
* 打开一个fragment并设置是否新开activity,设置是否添加返回栈
*
* @param pageName Fragemnt 名,在page.json中配置。
* @param pageName Fragment 名,在page.json中配置。
* @param bundle 页面跳转时传递的参数
* @param coreAnim 指定的动画理性 none/slide(左右平移)/present(由下向上)/fade(fade 动画)
* @param addToBackStack 是否添加到用户操作栈中
Expand Down Expand Up @@ -584,14 +606,14 @@ public final Fragment openPage(@NonNull PageOption pageOption) {
}
}

//======================生命周期=======================//

@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mAttachContext = new WeakReference<>(context);
}

//======================生命周期=======================//

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand Down Expand Up @@ -797,6 +819,10 @@ public void startActivityForResult(Intent intent, int requestCode) {
}
}

public interface PopCallback {
void run();
}

/**
* 页面跳转返回的监听接口
*/
Expand Down

0 comments on commit e4808e4

Please sign in to comment.