Browse Source

[1001699]增加案例界面显示

zk 1 year ago
parent
commit
e910eb983a

+ 4 - 0
app/src/main/java/com/datarecovery/master/data/api/bean/ExampleBean.java

@@ -0,0 +1,4 @@
+package com.datarecovery.master.data.api.bean;
+
+public class ExampleBean {
+}

+ 77 - 0
app/src/main/java/com/datarecovery/master/module/example/ExampleAdapter.java

@@ -0,0 +1,77 @@
+package com.datarecovery.master.module.example;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.recyclerview.widget.AsyncListDiffer;
+import androidx.recyclerview.widget.DiffUtil;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.datarecovery.master.data.api.bean.ExampleBean;
+import com.datarecovery.master.databinding.ItemExampleBinding;
+
+import java.util.List;
+
+public class ExampleAdapter extends RecyclerView.Adapter<ExampleAdapter.ViewHolder> {
+
+    private AsyncListDiffer<ExampleBean> listDiffer;
+    private final LifecycleOwner lifecycleOwner;
+
+    public ExampleAdapter(LifecycleOwner lifecycleOwner) {
+        this.lifecycleOwner = lifecycleOwner;
+        listDiffer = new AsyncListDiffer<>(this, new DiffUtil.ItemCallback<ExampleBean>() {
+            @Override
+            public boolean areItemsTheSame(@NonNull ExampleBean oldItem, @NonNull ExampleBean newItem) {
+                return false;
+            }
+
+            @Override
+            public boolean areContentsTheSame(@NonNull ExampleBean oldItem, @NonNull ExampleBean newItem) {
+                return false;
+            }
+        });
+    }
+
+    @NonNull
+    @Override
+    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        Context context = parent.getContext();
+        LayoutInflater layoutInflater = LayoutInflater.from(context);
+        ItemExampleBinding binding = ItemExampleBinding.inflate(layoutInflater, parent, false);
+        binding.setLifecycleOwner(lifecycleOwner);
+        return new ViewHolder(binding);
+    }
+
+
+    @Override
+    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+        holder.bind(listDiffer.getCurrentList().get(position));
+    }
+
+    @Override
+    public int getItemCount() {
+        return listDiffer.getCurrentList().size();
+    }
+
+    public void submit(List<ExampleBean> itemBeanList) {
+        listDiffer.submitList(itemBeanList);
+    }
+
+    public class ViewHolder extends RecyclerView.ViewHolder {
+
+        private final ItemExampleBinding binding;
+
+        public ViewHolder(@NonNull ItemExampleBinding binding) {
+            super(binding.getRoot());
+            this.binding = binding;
+            this.binding.setLifecycleOwner(lifecycleOwner);
+        }
+
+        public void bind(ExampleBean itemBean) {
+
+        }
+    }
+}

+ 32 - 0
app/src/main/java/com/datarecovery/master/module/example/ExampleFragment.java

@@ -1,6 +1,11 @@
 package com.datarecovery.master.module.example;
 package com.datarecovery.master.module.example;
 
 
+import android.os.Bundle;
+import android.view.View;
+
 import androidx.annotation.NonNull;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
 
 
 import com.atmob.app.lib.base.BaseFragment;
 import com.atmob.app.lib.base.BaseFragment;
 import com.datarecovery.master.databinding.FragmentExampleBinding;
 import com.datarecovery.master.databinding.FragmentExampleBinding;
@@ -13,8 +18,35 @@ import dagger.hilt.android.AndroidEntryPoint;
 public class ExampleFragment extends BaseFragment<FragmentExampleBinding> {
 public class ExampleFragment extends BaseFragment<FragmentExampleBinding> {
 
 
 
 
+    private ExampleViewModel exampleViewModel;
+    private ExampleAdapter exampleAdapter;
+
+    @Override
+    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        initView();
+        initObserver();
+    }
+
+    private void initView() {
+        exampleAdapter = new ExampleAdapter(this);
+        binding.ryExample.setLayoutManager(new LinearLayoutManager(getContext()));
+        binding.ryExample.setAdapter(exampleAdapter);
+    }
+
+    private void initObserver() {
+        exampleViewModel.getExampleList().observe(getViewLifecycleOwner(), list -> exampleAdapter.submit(list));
+    }
+
     @Override
     @Override
     protected void configImmersion(@NonNull ImmersionBar immersionBar) {
     protected void configImmersion(@NonNull ImmersionBar immersionBar) {
         immersionBar.statusBarDarkFont(true);
         immersionBar.statusBarDarkFont(true);
     }
     }
+
+    @Override
+    protected void initViewModel() {
+        super.initViewModel();
+        exampleViewModel = getViewModelProvider().get(ExampleViewModel.class);
+        binding.setExampleViewModel(exampleViewModel);
+    }
 }
 }

+ 30 - 0
app/src/main/java/com/datarecovery/master/module/example/ExampleViewModel.java

@@ -0,0 +1,30 @@
+package com.datarecovery.master.module.example;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+
+import com.atmob.app.lib.base.BaseViewModel;
+import com.datarecovery.master.data.api.bean.ExampleBean;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import dagger.hilt.android.lifecycle.HiltViewModel;
+
+@HiltViewModel
+public class ExampleViewModel extends BaseViewModel {
+
+
+    private final MutableLiveData<List<ExampleBean>> exampleList = new MutableLiveData<>();
+
+    @Inject
+    public ExampleViewModel() {
+
+    }
+
+    public LiveData<List<ExampleBean>> getExampleList() {
+        return exampleList;
+    }
+
+}

BIN
app/src/main/res/drawable-xxhdpi/bg_example.webp


BIN
app/src/main/res/drawable-xxhdpi/icon_example.webp


+ 5 - 0
app/src/main/res/drawable/bg_example_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <corners android:radius="8dp" />
+    <solid android:color="@color/white" />
+</shape>

+ 8 - 4
app/src/main/res/layout/activity_browser.xml

@@ -16,14 +16,18 @@
 
 
         <androidx.appcompat.widget.Toolbar
         <androidx.appcompat.widget.Toolbar
             android:id="@+id/browser_header"
             android:id="@+id/browser_header"
+            style="@style/tool_bar_style"
             android:layout_width="match_parent"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_height="wrap_content"
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:navigationIcon="@drawable/icon_back"
             app:navigationIcon="@drawable/icon_back"
-            app:navigationOnClickListener="@{()-> browserViewModel.onBackClick()}"
-            app:title="@{browserViewModel.webTitle}"
-            style="@style/tool_bar_style"
-            tools:title="this is a test title" />
+            app:navigationOnClickListener="@{()-> browserViewModel.onBackClick()}">
+
+            <TextView
+                style="@style/Tool_Bar_Title_Txt"
+                android:text="@{browserViewModel.webTitle}"
+                tools:text="this is a test title" />
+        </androidx.appcompat.widget.Toolbar>
 
 
         <WebView
         <WebView
             android:id="@+id/browser_web_view"
             android:id="@+id/browser_web_view"

+ 66 - 4
app/src/main/res/layout/fragment_example.xml

@@ -1,6 +1,68 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
 
 
-</androidx.constraintlayout.widget.ConstraintLayout>
+    <data>
+
+        <variable
+            name="exampleViewModel"
+            type="com.datarecovery.master.module.example.ExampleViewModel" />
+
+        <import type="com.atmob.common.ui.SizeUtil" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#F8F8F8">
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:src="@drawable/bg_example"
+            app:layout_constraintDimensionRatio="1080:558"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <Space
+            android:id="@+id/space_status_bar"
+            android:layout_width="match_parent"
+            android:layout_height="@{SizeUtil.getStatusBarHeight(), default=@dimen/app_status_bar_height}"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <Space
+            android:id="@+id/space1"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:20"
+            app:layout_constraintTop_toBottomOf="@+id/space_status_bar" />
+
+        <ImageView
+            android:id="@+id/iv_example"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="@dimen/app_common_page_horizontal_padding"
+            android:src="@drawable/icon_example"
+            app:layout_constraintDimensionRatio="216:60"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/space1"
+            app:layout_constraintWidth_percent="0.2" />
+
+        <Space
+            android:id="@+id/space2"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintDimensionRatio="360:22"
+            app:layout_constraintTop_toBottomOf="@+id/iv_example" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/ry_example"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/space2"
+            tools:listitem="@layout/item_example" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>

+ 55 - 0
app/src/main/res/layout/item_example.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="12dp"
+        android:layout_marginBottom="11dp"
+        android:background="@drawable/bg_example_bg"
+        android:padding="@dimen/app_common_page_horizontal_padding">
+
+
+        <TextView
+            android:id="@+id/tv_title"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:textColor="@color/common_txt_color"
+            android:textSize="15sp"
+            android:textStyle="bold"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintWidth_percent="0.6973684210526316"
+            tools:text="在手机相册中浏览照片时,不小心滑动屏幕导致一些重要的照片被误删除" />
+
+        <TextView
+            android:id="@+id/tv_date"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:textColor="#A7A7A7"
+            android:textSize="12sp"
+            app:layout_constraintLeft_toLeftOf="@+id/tv_title"
+            app:layout_constraintTop_toBottomOf="@+id/tv_title"
+            tools:text="2023-12-29 13:15:26" />
+
+        <ImageView
+            android:id="@+id/iv_example"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginStart="12dp"
+            app:layout_constraintDimensionRatio="1:1"
+            app:layout_constraintStart_toEndOf="@+id/tv_title"
+            app:layout_constraintTop_toTopOf="@+id/tv_title"
+            app:layout_constraintWidth_percent="0.2631578947368421"
+            tools:src="@color/colorPrimary" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>