Browse Source

BaseFragment切换成viewbinding

Pq 3 years ago
parent
commit
6eb5fd68af

+ 8 - 5
BaseLibrary/src/main/java/com/cooleshow/base/ui/fragment/BaseFragment.java

@@ -8,6 +8,7 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewStub;
+import android.widget.FrameLayout;
 import android.widget.RelativeLayout;
 
 import com.cooleshow.base.R;
@@ -20,14 +21,16 @@ import androidx.annotation.NonNull;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
+import androidx.viewbinding.ViewBinding;
 
-public abstract class BaseFragment extends Fragment implements BaseView {
+public abstract class BaseFragment<V extends ViewBinding> extends Fragment implements BaseView {
     protected Context mContext;
     private View rootView;
-    private ViewStub mViewStubContent;
+    private FrameLayout mViewStubContent;
     private ViewStub mViewStubNoData;
     private ViewStub mViewStubError;
     private ProgressLoading mLoading;
+    protected V mViewBinding;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
@@ -60,12 +63,12 @@ public abstract class BaseFragment extends Fragment implements BaseView {
         mViewStubContent = view.findViewById(R.id.view_stub_content);
         mViewStubNoData = view.findViewById(R.id.view_stub_nodata);
         mViewStubError = view.findViewById(R.id.view_stub_error);
-        mViewStubContent.setLayoutResource(getLayoutResId());
-        mViewStubContent.inflate();
+        mViewBinding = getLayoutView();
+        mViewStubContent.addView(mViewBinding.getRoot());
         mLoading = ProgressLoading.Companion.create(requireContext());
     }
 
-    protected abstract int getLayoutResId();
+    protected abstract V getLayoutView();
 
     protected abstract void initView(View rootView);
 

+ 3 - 3
BaseLibrary/src/main/java/com/cooleshow/base/ui/fragment/BaseMVPFragment.java

@@ -7,7 +7,9 @@ import android.view.View;
 
 import com.cooleshow.base.presenter.BasePresenter;
 
-public abstract class BaseMVPFragment<P extends BasePresenter> extends BaseFragment {
+import androidx.viewbinding.ViewBinding;
+
+public abstract class BaseMVPFragment<V extends ViewBinding,P extends BasePresenter> extends BaseFragment<V> {
 
     protected Context mContext;
     protected P presenter;
@@ -42,8 +44,6 @@ public abstract class BaseMVPFragment<P extends BasePresenter> extends BaseFragm
 
     protected abstract P createPresenter();
 
-    protected abstract int getLayoutResId();
-
     protected abstract void initView(View rootView);
 
     protected abstract void initData();

+ 1 - 1
BaseLibrary/src/main/res/layout/fragment_root.xml

@@ -4,7 +4,7 @@
                 android:layout_height="match_parent">
 
 
-    <ViewStub
+    <FrameLayout
         android:id="@+id/view_stub_content"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>

+ 5 - 5
teacher/src/main/java/com/cooleshow/teacher/ui/main/HomeFragment.kt

@@ -4,20 +4,20 @@ import android.view.View
 import com.cooleshow.base.ui.fragment.BaseMVPFragment
 import com.cooleshow.teacher.R
 import com.cooleshow.teacher.contract.HomeContract
+import com.cooleshow.teacher.databinding.FragmentHomeLayoutBinding
 import com.cooleshow.teacher.presenter.main.HomePresenter
 
 
 /**
  * Author by pq, Date on 2022/4/20.
  */
-class HomeFragment : BaseMVPFragment<HomePresenter>(), HomeContract.HomeView {
-
-    override fun getLayoutResId(): Int {
-        return R.layout.fg_home_layout
+class HomeFragment : BaseMVPFragment<FragmentHomeLayoutBinding, HomePresenter>(),
+    HomeContract.HomeView {
+    override fun getLayoutView(): FragmentHomeLayoutBinding {
+        return FragmentHomeLayoutBinding.inflate(layoutInflater)
     }
 
     override fun initView(rootView: View?) {
-        
     }
 
     override fun initData() {

+ 1 - 0
teacher/src/main/res/layout/fg_home_layout.xml → teacher/src/main/res/layout/fragment_home_layout.xml

@@ -5,6 +5,7 @@
     android:layout_height="match_parent">
 
     <TextView
+        android:id="@+id/tv_home"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="首页"