From 2c2b6a3821d1e4ffbb2a0511d45943aae1992e55 Mon Sep 17 00:00:00 2001
From: Administrator <123>
Date: Wed, 27 Oct 2021 08:20:51 +0000
Subject: [PATCH] baseactivity binding搭建

---
 app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java                   |    1 
 app/src/main/java/com/duqing/missions/base/BaseActivity.java                      |   34 +++++++++++++++++
 app/src/main/java/com/duqing/missions/ui/notifications/NotificationsFragment.java |   23 ++++-------
 app/src/main/java/com/duqing/missions/MainActivity.java                           |   14 +++----
 4 files changed, 49 insertions(+), 23 deletions(-)

diff --git a/app/src/main/java/com/duqing/missions/MainActivity.java b/app/src/main/java/com/duqing/missions/MainActivity.java
index 6ee57ce..3d0f16a 100644
--- a/app/src/main/java/com/duqing/missions/MainActivity.java
+++ b/app/src/main/java/com/duqing/missions/MainActivity.java
@@ -1,26 +1,24 @@
 package com.duqing.missions;
 
 import android.os.Bundle;
-import com.google.android.material.bottomnavigation.BottomNavigationView;
-import androidx.appcompat.app.AppCompatActivity;
+
 import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import androidx.navigation.ui.AppBarConfiguration;
 import androidx.navigation.ui.NavigationUI;
+
+import com.duqing.missions.base.BaseActivity;
 import com.duqing.missions.databinding.ActivityMainBinding;
+import com.google.android.material.bottomnavigation.BottomNavigationView;
 
-public class MainActivity extends AppCompatActivity {
+public class MainActivity extends BaseActivity<ActivityMainBinding> {
 
-private ActivityMainBinding binding;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-     binding = ActivityMainBinding.inflate(getLayoutInflater());
-     setContentView(binding.getRoot());
-
-        BottomNavigationView navView = findViewById(R.id.nav_view);
+        BottomNavigationView navView = binding.navView;
         // Passing each menu ID as a set of Ids because each
         // menu should be considered as top level destinations.
         AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
diff --git a/app/src/main/java/com/duqing/missions/base/BaseActivity.java b/app/src/main/java/com/duqing/missions/base/BaseActivity.java
new file mode 100644
index 0000000..cd24d4d
--- /dev/null
+++ b/app/src/main/java/com/duqing/missions/base/BaseActivity.java
@@ -0,0 +1,34 @@
+package com.duqing.missions.base;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.viewbinding.ViewBinding;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+
+/**
+ * Created by Administrator on 2021/10/27 0027.
+ */
+public abstract class BaseActivity<B extends ViewBinding> extends AppCompatActivity {
+
+    protected  B binding;
+
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        // get genericity "B"
+        Class<B> entityClass = (Class<B>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
+        try {
+            Method method = entityClass.getMethod("inflate", LayoutInflater.class);//get method from name "inflate";
+            binding = (B) method.invoke(entityClass,getLayoutInflater());//execute method to create a objct of viewbind;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        setContentView(binding.getRoot());
+    }
+}
diff --git a/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java b/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java
index 02ad0bd..9e8e621 100644
--- a/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java
+++ b/app/src/main/java/com/duqing/missions/ui/home/HomeFragment.java
@@ -16,7 +16,6 @@
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.duqing.missions.R;
 import com.duqing.missions.databinding.FragmentHomeBinding;
 import com.scwang.smart.refresh.header.ClassicsHeader;
 import com.scwang.smart.refresh.layout.SmartRefreshLayout;
diff --git a/app/src/main/java/com/duqing/missions/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/duqing/missions/ui/notifications/NotificationsFragment.java
index 204b7fa..7ca38c9 100644
--- a/app/src/main/java/com/duqing/missions/ui/notifications/NotificationsFragment.java
+++ b/app/src/main/java/com/duqing/missions/ui/notifications/NotificationsFragment.java
@@ -4,41 +4,36 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.TextView;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.fragment.app.Fragment;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
-import com.duqing.missions.R;
+
 import com.duqing.missions.databinding.FragmentNotificationsBinding;
 
 public class NotificationsFragment extends Fragment {
 
     private NotificationsViewModel notificationsViewModel;
-private FragmentNotificationsBinding binding;
+    private FragmentNotificationsBinding binding;
 
-    public View onCreateView(@NonNull LayoutInflater inflater,
-            ViewGroup container, Bundle savedInstanceState) {
-        notificationsViewModel =
-                new ViewModelProvider(this).get(NotificationsViewModel.class);
-
-    binding = FragmentNotificationsBinding.inflate(inflater, container, false);
-    View root = binding.getRoot();
-
-        final TextView textView = binding.textNotifications;
+    public View onCreateView(@NonNull LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
+        notificationsViewModel = new ViewModelProvider(this).get(NotificationsViewModel.class);
+        binding = FragmentNotificationsBinding.inflate(inflater, container, false);
+        View root = binding.getRoot();
         notificationsViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
             @Override
             public void onChanged(@Nullable String s) {
-                textView.setText(s);
             }
         });
         return root;
     }
 
-@Override
+    @Override
     public void onDestroyView() {
         super.onDestroyView();
         binding = null;
     }
+
 }
\ No newline at end of file

--
Gitblit v1.9.1