Runt
2022-08-13 b3a51f064c4dfb27f54cd9526803338d2e8dc296
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.runt.open.mvvm.base.activities;
 
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewbinding.ViewBinding;
 
import com.runt.open.mvvm.R;
import com.runt.open.mvvm.base.fragments.BaseFragment;
import com.runt.open.mvvm.base.model.BaseViewModel;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 带有fragment切换的activity
 *  继承此类,有效优化代码22行
 * 试用于加载各种fragment需求的activity
 * Created by Runt (qingingrunt2010@qq.com) on 2022/8/13.
 */
public class BaseFragmentActivity <VB extends ViewBinding,VM extends BaseViewModel>
        extends BaseActivity<VB,VM>{
 
 
    List<BaseFragment> fragments = new ArrayList<>();
 
    /**
     * 切换界面  要显示的fragnemt
     * @param fragment
     */
    protected void showFragment(BaseFragment fragment){
        showFragment(fragments.indexOf(fragment));
    }
 
    /**
     * 切换界面  要显示的fragnemt
     * @param position
     */
    protected void showFragment(int position){
        if(position>fragments.size()-1|| position < 0){
            showToast("当前fragment不在队列中");
            return;
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        for(int i = 0 ; i < fragments.size() ; i ++){
            if(i != position){
                transaction.hide(fragments.get(i));
            }
        }
        transaction.show(fragments.get(position));
        transaction.commit();
    }
 
    /**
     * 添加fragment
     * @param fragment
     */
    protected void addAndShowFragment(BaseFragment fragment){
        if(fragments.contains(fragment)){
            showFragment(fragment);
            return;
        }
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        for(int i = 0 ; i < fragments.size() ; i ++){
            transaction.hide(fragments.get(i));
        }
        transaction.add(R.id.framelayout,fragment).commit();
        fragments.add(fragment);
    }
 
 
}