Commit 028132f43d218831dcfa384a2fbfaa70dd866c44

Authored by shixianjie
1 parent 1863fd36a1
Exists in master

MessageDialog

app/src/main/java/com/hjx/parent/StuHomeworkActivity.java
1 package com.hjx.parent; 1 package com.hjx.parent;
2 2
3 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
4 import android.os.Bundle; 4 import android.os.Bundle;
5 import android.widget.LinearLayout; 5 import android.widget.LinearLayout;
6 import android.widget.PopupWindow; 6 import android.widget.PopupWindow;
7 7
8 import androidx.lifecycle.MutableLiveData; 8 import androidx.lifecycle.MutableLiveData;
9 9
10 import com.google.gson.Gson; 10 import com.google.gson.Gson;
11 import com.hjx.parent.adapter.HomeworkAdapter;
12 import com.hjx.parent.adapter.HomeworkListAdapter; 11 import com.hjx.parent.adapter.HomeworkListAdapter;
13 import com.hjx.parent.databinding.ActivityStudentHomeworkBinding; 12 import com.hjx.parent.databinding.ActivityStudentHomeworkBinding;
14 import com.hjx.parent.databinding.PopupFilterFeedbackBinding; 13 import com.hjx.parent.databinding.PopupFilterFeedbackBinding;
15 import com.hjx.parent.databinding.PopupFilterGradeBinding; 14 import com.hjx.parent.databinding.PopupFilterGradeBinding;
16 import com.hjx.parent.databinding.PopupFilterSubjectBinding; 15 import com.hjx.parent.databinding.PopupFilterSubjectBinding;
17 import com.hjx.parent.databinding.PopupFilterTermBinding; 16 import com.hjx.parent.databinding.PopupFilterTermBinding;
17 import com.hjx.parent.dialog.MsgConfirmDialog;
18 import com.hjx.parent.rx.BaseRxActivity; 18 import com.hjx.parent.rx.BaseRxActivity;
19 import com.prws.common.bean.Student; 19 import com.prws.common.bean.Student;
20 import com.prws.common.net.NetWorks; 20 import com.prws.common.net.NetWorks;
21 import com.prws.common.utils.SharedPreferencesUtil; 21 import com.prws.common.utils.SharedPreferencesUtil;
22 import com.trello.rxlifecycle2.android.RxLifecycleAndroid; 22 import com.trello.rxlifecycle2.android.RxLifecycleAndroid;
23 23
24 import java.util.Collections; 24 import java.util.Collections;
25 25
26 import io.reactivex.Observable; 26 import io.reactivex.Observable;
27 import io.reactivex.android.schedulers.AndroidSchedulers; 27 import io.reactivex.android.schedulers.AndroidSchedulers;
28 import io.reactivex.schedulers.Schedulers; 28 import io.reactivex.schedulers.Schedulers;
29 29
30 public class StuHomeworkActivity extends BaseRxActivity<ActivityStudentHomeworkBinding> { 30 public class StuHomeworkActivity extends BaseRxActivity<ActivityStudentHomeworkBinding> {
31 31
32 private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter(); 32 private final HomeworkListAdapter homeworkAdapter = new HomeworkListAdapter();
33 33
34 PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter; 34 PopupWindow subjectFilter, gradeFilter, termFilter, feedbackFilter;
35 MsgConfirmDialog deleteDialog;
35 State state = new State(); 36 State state = new State();
36 37
37 private void handlerIntent() { 38 private void handlerIntent() {
38 String json = getIntent().getStringExtra("studentJson"); 39 String json = getIntent().getStringExtra("studentJson");
39 if (json == null) json = (String) SharedPreferencesUtil.getData("student", ""); 40 if (json == null) json = (String) SharedPreferencesUtil.getData("student", "");
40 try { state.student = new Gson().fromJson(json, Student.class); } 41 try { state.student = new Gson().fromJson(json, Student.class); }
41 catch (Throwable t) { t.printStackTrace(); } 42 catch (Throwable t) { t.printStackTrace(); }
42 } 43 }
43 44
44 @SuppressLint("SetTextI18n") 45 @SuppressLint("SetTextI18n")
45 @Override 46 @Override
46 public void initView(Bundle savedInstanceState) { 47 public void initView(Bundle savedInstanceState) {
47 handlerIntent(); 48 handlerIntent();
48 if (state.student == null) { 49 if (state.student == null) {
49 finish(); 50 finish();
50 return; 51 return;
51 } 52 }
52 binding.toolbar.setNavigationOnClickListener(v -> onBackPressed()); 53 binding.toolbar.setNavigationOnClickListener(v -> onBackPressed());
53 binding.tvTitle.setText(state.student.stuName + "的全部作业"); 54 binding.tvTitle.setText(state.student.stuName + "的全部作业");
54 55
55 binding.recyclerView.setAdapter(homeworkAdapter); 56 binding.recyclerView.setAdapter(homeworkAdapter);
56 getHomework(); 57 getHomework();
57 58
58 binding.ftSubject.setOnClickListener(v -> showSubjectFilter()); 59 binding.ftSubject.setOnClickListener(v -> showSubjectFilter());
59 binding.ftGrade.setOnClickListener(v -> showGradeFilter()); 60 binding.ftGrade.setOnClickListener(v -> showGradeFilter());
60 binding.ftTerm.setOnClickListener(v -> showTermFilter()); 61 binding.ftTerm.setOnClickListener(v -> showTermFilter());
61 binding.ftFeedback.setOnClickListener(v -> showFeedbackFilter()); 62 binding.ftFeedback.setOnClickListener(v -> showFeedbackFilter());
63 homeworkAdapter.deleteCall = data -> {
64 if (deleteDialog == null) {
65 deleteDialog = new MsgConfirmDialog.Builder(this)
66 .setMessage("确认要删除吗?一旦删除不可恢复")
67 .setPositive("暂不删除")
68 .setNegative("确定删除")
69 .build();
70 }
71 deleteDialog.show(() -> {
72 // TODO Delete
73 return true;
74 }, null);
75 };
62 } 76 }
63 77
64 78
65 @SuppressLint("CheckResult") 79 @SuppressLint("CheckResult")
66 protected void getHomework() { 80 protected void getHomework() {
67 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), state.student.stuId) 81 NetWorks.service_url.getStudentHomework(NetWorks.getHeader(), state.student.stuId)
68 .subscribeOn(Schedulers.io()) 82 .subscribeOn(Schedulers.io())
69 .observeOn(AndroidSchedulers.mainThread()) 83 .observeOn(AndroidSchedulers.mainThread())
70 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle())) 84 .compose(RxLifecycleAndroid.bindActivity(getRxLifecycle()))
71 .toObservable() 85 .toObservable()
72 .flatMap(response -> Observable.fromIterable(response.getData())) 86 .flatMap(response -> Observable.fromIterable(response.getData()))
73 // 过滤 87 // 过滤
74 .filter(data -> { // 学科 88 .filter(data -> { // 学科
75 String subject = state.subject.getValue(); 89 String subject = state.subject.getValue();
76 if (subject == null || subject.isEmpty()) return true; 90 if (subject == null || subject.isEmpty()) return true;
77 else return subject.equals(data.getSubject()); 91 else return subject.equals(data.getSubject());
78 }) 92 })
79 .filter(data -> { // 年级 93 .filter(data -> { // 年级
80 String grade = state.grade.getValue(); 94 String grade = state.grade.getValue();
81 if (grade == null || grade.isEmpty()) return true; 95 if (grade == null || grade.isEmpty()) return true;
82 else return grade.equals(data.getGrade()); 96 else return grade.equals(data.getGrade());
83 }) 97 })
84 .filter(data -> { // 学期 98 .filter(data -> { // 学期
85 String term = state.term.getValue(); 99 String term = state.term.getValue();
86 if (term == null || term.isEmpty()) return true; 100 if (term == null || term.isEmpty()) return true;
87 else return term.equals(data.getTerm()); 101 else return term.equals(data.getTerm());
88 }) 102 })
89 .filter(data -> { // 反馈 103 .filter(data -> { // 反馈
90 Integer feedback = state.feedback.getValue(); 104 Integer feedback = state.feedback.getValue();
91 if (feedback == null || feedback == 0) return true; 105 if (feedback == null || feedback == 0) return true;
92 else return (feedback == 1 && data.getRight() != null) || (feedback == 2 && data.getRight() == null); 106 else return (feedback == 1 && data.getRight() != null) || (feedback == 2 && data.getRight() == null);
93 }) 107 })
94 // 过滤完成, 收集 108 // 过滤完成, 收集
95 .toList() 109 .toList()
96 .subscribe((data, th) -> { 110 .subscribe((data, th) -> {
97 if (th != null) th.printStackTrace(); 111 if (th != null) th.printStackTrace();
98 Collections.sort(data); 112 if (data != null) {
113 Collections.sort(data);
114 }
99 homeworkAdapter.setNewData(data); 115 homeworkAdapter.setNewData(data);
100 }); 116 });
101 } 117 }
102 118
103 private void showSubjectFilter() { 119 private void showSubjectFilter() {
104 if (subjectFilter == null) { 120 if (subjectFilter == null) {
105 PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater()); 121 PopupFilterSubjectBinding db = PopupFilterSubjectBinding.inflate(getLayoutInflater());
106 db.setLifecycleOwner(this); 122 db.setLifecycleOwner(this);
107 db.setState(state); 123 db.setState(state);
108 db.bg.setOnClickListener(v -> subjectFilter.dismiss()); 124 db.bg.setOnClickListener(v -> subjectFilter.dismiss());
109 subjectFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 125 subjectFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
110 subjectFilter.setOutsideTouchable(true); 126 subjectFilter.setOutsideTouchable(true);
111 subjectFilter.setOnDismissListener(this::getHomework); 127 subjectFilter.setOnDismissListener(this::getHomework);
112 } 128 }
113 subjectFilter.showAsDropDown(binding.anchorView); 129 subjectFilter.showAsDropDown(binding.anchorView);
114 } 130 }
115 131
116 private void showGradeFilter() { 132 private void showGradeFilter() {
117 if (gradeFilter == null) { 133 if (gradeFilter == null) {
118 PopupFilterGradeBinding db = PopupFilterGradeBinding.inflate(getLayoutInflater()); 134 PopupFilterGradeBinding db = PopupFilterGradeBinding.inflate(getLayoutInflater());
119 db.setLifecycleOwner(this); 135 db.setLifecycleOwner(this);
120 db.setState(state); 136 db.setState(state);
121 db.bg.setOnClickListener(v -> gradeFilter.dismiss()); 137 db.bg.setOnClickListener(v -> gradeFilter.dismiss());
122 gradeFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 138 gradeFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
123 gradeFilter.setOutsideTouchable(true); 139 gradeFilter.setOutsideTouchable(true);
124 gradeFilter.setOnDismissListener(this::getHomework); 140 gradeFilter.setOnDismissListener(this::getHomework);
125 } 141 }
126 gradeFilter.showAsDropDown(binding.anchorView); 142 gradeFilter.showAsDropDown(binding.anchorView);
127 } 143 }
128 144
129 private void showTermFilter() { 145 private void showTermFilter() {
130 if (termFilter == null) { 146 if (termFilter == null) {
131 PopupFilterTermBinding db = PopupFilterTermBinding.inflate(getLayoutInflater()); 147 PopupFilterTermBinding db = PopupFilterTermBinding.inflate(getLayoutInflater());
132 db.setLifecycleOwner(this); 148 db.setLifecycleOwner(this);
133 db.setState(state); 149 db.setState(state);
134 db.bg.setOnClickListener(v -> termFilter.dismiss()); 150 db.bg.setOnClickListener(v -> termFilter.dismiss());
135 termFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 151 termFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
136 termFilter.setOutsideTouchable(true); 152 termFilter.setOutsideTouchable(true);
137 termFilter.setOnDismissListener(this::getHomework); 153 termFilter.setOnDismissListener(this::getHomework);
138 } 154 }
139 termFilter.showAsDropDown(binding.anchorView); 155 termFilter.showAsDropDown(binding.anchorView);
140 } 156 }
141 157
142 private void showFeedbackFilter() { 158 private void showFeedbackFilter() {
143 if (feedbackFilter == null) { 159 if (feedbackFilter == null) {
144 PopupFilterFeedbackBinding db = PopupFilterFeedbackBinding.inflate(getLayoutInflater()); 160 PopupFilterFeedbackBinding db = PopupFilterFeedbackBinding.inflate(getLayoutInflater());
145 db.setLifecycleOwner(this); 161 db.setLifecycleOwner(this);
146 db.setState(state); 162 db.setState(state);
147 db.bg.setOnClickListener(v -> feedbackFilter.dismiss()); 163 db.bg.setOnClickListener(v -> feedbackFilter.dismiss());
148 feedbackFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 164 feedbackFilter = new PopupWindow(db.getRoot(), LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
149 feedbackFilter.setOutsideTouchable(true); 165 feedbackFilter.setOutsideTouchable(true);
150 feedbackFilter.setOnDismissListener(this::getHomework); 166 feedbackFilter.setOnDismissListener(this::getHomework);
151 } 167 }
152 feedbackFilter.showAsDropDown(binding.anchorView); 168 feedbackFilter.showAsDropDown(binding.anchorView);
153 } 169 }
154 170
155 @Override 171 @Override
156 protected ActivityStudentHomeworkBinding getViewBinding() { 172 protected ActivityStudentHomeworkBinding getViewBinding() {
157 return ActivityStudentHomeworkBinding.inflate(getLayoutInflater()); 173 return ActivityStudentHomeworkBinding.inflate(getLayoutInflater());
158 } 174 }
159 175
160 public static class State { 176 public static class State {
161 public Student student; 177 public Student student;
162 178
163 public MutableLiveData<String> subject = new MutableLiveData<>(""); 179 public MutableLiveData<String> subject = new MutableLiveData<>("");
164 public void setSubject(String value) { 180 public void setSubject(String value) {
165 subject.setValue(value); 181 subject.setValue(value);
166 } 182 }
167 183
168 public MutableLiveData<String> grade = new MutableLiveData<>(""); 184 public MutableLiveData<String> grade = new MutableLiveData<>("");
169 public void setGrade(String value) { 185 public void setGrade(String value) {
170 grade.setValue(value); 186 grade.setValue(value);
171 } 187 }
172 188
173 public MutableLiveData<String> term = new MutableLiveData<>(""); 189 public MutableLiveData<String> term = new MutableLiveData<>("");
174 public void setTerm(String value) { 190 public void setTerm(String value) {
175 term.setValue(value); 191 term.setValue(value);
176 } 192 }
177 193
178 //0:全部, 1: 已反馈, 2:未反馈 194 //0:全部, 1: 已反馈, 2:未反馈
179 public MutableLiveData<Integer> feedback = new MutableLiveData<>(0); 195 public MutableLiveData<Integer> feedback = new MutableLiveData<>(0);
180 public void setFeedback(int value) { 196 public void setFeedback(int value) {
181 feedback.setValue(value); 197 feedback.setValue(value);
182 } 198 }
183 } 199 }
184 } 200 }
app/src/main/java/com/hjx/parent/adapter/HomeworkListAdapter.java
1 package com.hjx.parent.adapter; 1 package com.hjx.parent.adapter;
2 2
3 import android.view.View; 3 import android.view.View;
4 import android.widget.TextView; 4 import android.widget.TextView;
5 5
6 import androidx.annotation.NonNull; 6 import androidx.annotation.NonNull;
7 7
8 import com.chad.library.adapter.base.BaseQuickAdapter; 8 import com.chad.library.adapter.base.BaseQuickAdapter;
9 import com.chad.library.adapter.base.BaseViewHolder; 9 import com.chad.library.adapter.base.BaseViewHolder;
10 import com.hjx.parent.R; 10 import com.hjx.parent.R;
11 import com.hjx.parent.function.Function0;
12 import com.hjx.parent.function.Function1;
11 import com.prws.common.bean.homework.HomeworkList; 13 import com.prws.common.bean.homework.HomeworkList;
12 14
13 public class HomeworkListAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> { 15 public class HomeworkListAdapter extends BaseQuickAdapter<HomeworkList, BaseViewHolder> {
14 16
17 public Function1<HomeworkList> deleteCall;
18
15 public HomeworkListAdapter() { 19 public HomeworkListAdapter() {
16 super(R.layout.item_homework_list); 20 super(R.layout.item_homework_list);
17 } 21 }
18 22
19 @Override 23 @Override
20 protected void convert(@NonNull BaseViewHolder helper, HomeworkList homework) { 24 protected void convert(@NonNull BaseViewHolder helper, HomeworkList homework) {
21 helper.setGone(R.id.tvFlag, homework.getRight() != null); 25 helper.setGone(R.id.tvFlag, homework.getRight() != null);
22 helper.setText(R.id.tvName, homework.getName()); 26 helper.setText(R.id.tvName, homework.getName());
23 helper.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm()); 27 helper.setText(R.id.tvGrade, homework.getGrade() + "-" + homework.getTerm());
24 int subjectImg; 28 int subjectImg;
25 switch (homework.getSubject()) { 29 switch (homework.getSubject()) {
26 case "语文": 30 case "语文":
27 subjectImg = R.drawable.ic_chinese; 31 subjectImg = R.drawable.ic_chinese;
28 break; 32 break;
29 case "英语": 33 case "英语":
30 subjectImg = R.drawable.ic_english; 34 subjectImg = R.drawable.ic_english;
31 break; 35 break;
32 case "物理": 36 case "物理":
33 subjectImg = R.drawable.ic_physics; 37 subjectImg = R.drawable.ic_physics;
34 break; 38 break;
35 case "化学": 39 case "化学":
36 subjectImg = R.drawable.ic_chemistry; 40 subjectImg = R.drawable.ic_chemistry;
37 break; 41 break;
38 case "数学": 42 case "数学":
39 default: 43 default:
40 subjectImg = R.drawable.ic_math; 44 subjectImg = R.drawable.ic_math;
41 } 45 }
42 helper.setImageResource(R.id.ivSubject, subjectImg); 46 helper.setImageResource(R.id.ivSubject, subjectImg);
43 47
44 TextView tvDate = helper.getView(R.id.tvDate); 48 TextView tvDate = helper.getView(R.id.tvDate);
45 int index = getData().indexOf(homework); 49 int index = getData().indexOf(homework);
46 if (index == 0) { 50 if (index == 0) {
47 tvDate.setVisibility(View.VISIBLE); 51 tvDate.setVisibility(View.VISIBLE);
48 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) { 52 } else if (!homework.getFormatTime().equals(getData().get(index - 1).getFormatTime())) {
49 tvDate.setVisibility(View.VISIBLE); 53 tvDate.setVisibility(View.VISIBLE);
50 } else { 54 } else {
51 tvDate.setVisibility(View.GONE); 55 tvDate.setVisibility(View.GONE);
52 } 56 }
53 tvDate.setText(homework.getFormatTime()); 57 tvDate.setText(homework.getFormatTime());
58
59 View btnDelete = helper.getView(R.id.btnDelete);
60 btnDelete.setOnClickListener(v -> {
61 if (deleteCall != null) deleteCall.invoke(homework);
62 });
63
64 View btnDetail = helper.getView(R.id.btnDetail);
65 btnDetail.setOnClickListener(v -> {
66 // TODO
67 });
54 } 68 }
55 } 69 }
56 70
app/src/main/java/com/hjx/parent/dialog/MsgConfirmDialog.java
File was created 1 package com.hjx.parent.dialog;
2
3 import android.content.Context;
4
5 import androidx.annotation.NonNull;
6
7 import com.hjx.parent.databinding.DialogMessageConfirmBinding;
8 import com.hjx.parent.function.Function10;
9
10 public class MsgConfirmDialog extends BaseDialog<DialogMessageConfirmBinding>{
11 private CharSequence title, message, positive, negative;
12 private Function10<Boolean> positiveClick, negativeClick;
13
14 private MsgConfirmDialog(Builder builder) {
15 super(builder.context);
16 title = builder.title;
17 message = builder.message;
18 positive = builder.positive;
19 negative = builder.negative;
20 positiveClick = builder.positiveClick;
21 negativeClick = builder.negativeClick;
22 }
23
24 @Override
25 public void initView() {
26 binding.tvTitle.setText(title);
27 binding.tvMessage.setText(message);
28 binding.btnPositive.setText(positive);
29 binding.btnNegative.setText(negative);
30 binding.btnPositive.setOnClickListener(v -> {
31 if (positiveClick != null) {
32 if (positiveClick.invoke()) dismiss();
33 } else {
34 dismiss();
35 }
36 });
37 binding.btnNegative.setOnClickListener(v -> {
38 if (negativeClick != null) {
39 if (negativeClick.invoke()) dismiss();
40 } else {
41 dismiss();
42 }
43 });
44 }
45
46 public void show(Function10<Boolean> positiveClick, Function10<Boolean> negativeClick) {
47 this.positiveClick = positiveClick;
48 this.negativeClick = negativeClick;
49 super.show();
50 }
51
52 @NonNull
53 @Override
54 public DialogMessageConfirmBinding getBinding() {
55 return DialogMessageConfirmBinding.inflate(getLayoutInflater());
56 }
57
58 public static class Builder {
59 public Builder(Context context) {
60 this.context = context;
61 }
62 private Context context;
63 private CharSequence title = "温馨提示";
64 private CharSequence message = "";
65 private CharSequence positive = "确定";
66 private CharSequence negative = "取消";
67 private Function10<Boolean> positiveClick = () -> true;
68 private Function10<Boolean> negativeClick = () -> true;
69
70 public Builder setTitle(CharSequence title) {
71 this.title = title;
72 return this;
73 }
74
75 public Builder setMessage(CharSequence message) {
76 this.message = message;
77 return this;
78 }
79
80 public Builder setPositive(CharSequence positive) {
81 this.positive = positive;
82 return this;
83 }
84
85 public Builder setNegative(CharSequence negative) {
86 this.negative = negative;
87 return this;
88 }
89
90 public Builder setPositiveClick(Function10<Boolean> positiveClick) {
91 this.positiveClick = positiveClick;
92 return this;
93 }
94
95 public Builder setNegativeClick(Function10<Boolean> negativeClick) {
96 this.negativeClick = negativeClick;
97 return this;
98 }
99
100 public MsgConfirmDialog build() {
101 return new MsgConfirmDialog(this);
102 }
103 }
104 }
105
app/src/main/res/layout/dialog_message_confirm.xml
File was created 1 <?xml version="1.0" encoding="utf-8"?>
2 <FrameLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools"
6 android:layout_width="match_parent"
7 android:layout_height="match_parent">
8
9 <LinearLayout
10 android:orientation="vertical"
11 android:background="@drawable/shape_radius_10"
12 android:backgroundTint="@color/white"
13 android:layout_gravity="center"
14 android:layout_width="280dp"
15 android:layout_height="wrap_content">
16
17 <TextView
18 android:id="@+id/tvTitle"
19 tools:text="温馨提示"
20 android:textSize="18sp"
21 android:textColor="#333"
22 android:textStyle="bold"
23 android:layout_gravity="center_horizontal"
24 android:layout_marginTop="20dp"
25 android:layout_width="wrap_content"
26 android:layout_height="wrap_content"/>
27
28 <TextView
29 android:id="@+id/tvMessage"
30 tools:text="确认要删除吗?一旦删除不可恢复"
31 android:textSize="14sp"
32 android:textColor="#333"
33 android:gravity="center"
34 android:layout_marginHorizontal="15dp"
35 android:layout_marginTop="16dp"
36 android:layout_width="match_parent"
37 android:layout_height="wrap_content"/>
38 <View
39 android:background="#EEE"
40 android:layout_marginHorizontal="10dp"
41 android:layout_marginTop="26dp"
42 android:layout_width="match_parent"
43 android:layout_height="1dp"/>
44 <LinearLayout
45 android:orientation="horizontal"
46 android:weightSum="2"
47 android:layout_width="match_parent"
48 android:layout_height="44dp">
49 <TextView
50 android:id="@+id/btnNegative"
51 tools:text="取消"
52 android:textSize="17sp"
53 android:textColor="#999"
54 android:textStyle="bold"
55 android:gravity="center"
56 android:layout_weight="1"
57 android:layout_width="0dp"
58 android:layout_height="match_parent"/>
59 <View
60 android:background="#EEE"
61 android:layout_marginVertical="3dp"
62 android:layout_width="1dp"
63 android:layout_height="match_parent"/>
64 <TextView
65 android:id="@+id/btnPositive"
66 tools:text="确定"
67 android:textSize="17sp"
68 android:textColor="#1C90F3"
69 android:textStyle="bold"
70 android:gravity="center"
71 android:layout_weight="1"
72 android:layout_width="0dp"
73 android:layout_height="match_parent"/>
74 </LinearLayout>
75 </LinearLayout>
76
77 </FrameLayout>
app/src/main/res/layout/item_homework_list.xml
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout 2 <LinearLayout
3 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:app="http://schemas.android.com/apk/res-auto"
5 xmlns:tools="http://schemas.android.com/tools" 5 xmlns:tools="http://schemas.android.com/tools"
6 android:orientation="vertical" 6 android:orientation="vertical"
7 android:paddingHorizontal="10dp" 7 android:paddingHorizontal="10dp"
8 android:layout_marginVertical="8dp" 8 android:layout_marginVertical="8dp"
9 android:layout_width="match_parent" 9 android:layout_width="match_parent"
10 android:layout_height="wrap_content" 10 android:layout_height="wrap_content"
11 tools:ignore="SmallSp,HardcodedText"> 11 tools:ignore="SmallSp,HardcodedText">
12 12
13 <TextView 13 <TextView
14 android:id="@+id/tvDate" 14 android:id="@+id/tvDate"
15 android:visibility="gone" 15 android:visibility="gone"
16 tools:visibility="visible" 16 tools:visibility="visible"
17 tools:text="2024-09-25" 17 tools:text="2024-09-25"
18 android:textSize="12sp" 18 android:textSize="12sp"
19 android:textColor="#999" 19 android:textColor="#999"
20 android:layout_marginBottom="15dp" 20 android:layout_marginBottom="15dp"
21 android:layout_width="wrap_content" 21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"/> 22 android:layout_height="wrap_content"/>
23 23
24 <FrameLayout 24 <FrameLayout
25 android:background="@drawable/shape_radius_10" 25 android:background="@drawable/shape_radius_10"
26 android:backgroundTint="@color/white" 26 android:backgroundTint="@color/white"
27 android:layout_width="match_parent" 27 android:layout_width="match_parent"
28 android:layout_height="75dp"> 28 android:layout_height="75dp">
29 <LinearLayout 29 <LinearLayout
30 android:orientation="horizontal" 30 android:orientation="horizontal"
31 android:gravity="center_vertical" 31 android:gravity="center_vertical"
32 android:layout_width="match_parent" 32 android:layout_width="match_parent"
33 android:layout_height="match_parent"> 33 android:layout_height="match_parent">
34 <ImageView 34 <ImageView
35 android:id="@+id/ivSubject" 35 android:id="@+id/ivSubject"
36 tools:src="@drawable/ic_math" 36 tools:src="@drawable/ic_math"
37 android:layout_marginStart="10dp" 37 android:layout_marginStart="10dp"
38 android:layout_width="44dp" 38 android:layout_width="44dp"
39 android:layout_height="56dp" 39 android:layout_height="56dp"
40 android:importantForAccessibility="no" /> 40 android:importantForAccessibility="no" />
41 <LinearLayout 41 <LinearLayout
42 android:orientation="vertical" 42 android:orientation="vertical"
43 android:layout_marginStart="14dp" 43 android:layout_marginStart="14dp"
44 android:layout_marginEnd="10dp" 44 android:layout_marginEnd="10dp"
45 android:layout_marginVertical="16dp" 45 android:layout_marginVertical="16dp"
46 android:layout_width="match_parent" 46 android:layout_width="match_parent"
47 android:layout_height="match_parent"> 47 android:layout_height="match_parent">
48 <TextView 48 <TextView
49 android:id="@+id/tvName" 49 android:id="@+id/tvName"
50 tools:text="作业名称" 50 tools:text="作业名称"
51 android:textSize="13sp" 51 android:textSize="13sp"
52 android:textColor="#333" 52 android:textColor="#333"
53 android:layout_width="wrap_content" 53 android:layout_width="wrap_content"
54 android:layout_height="wrap_content"/> 54 android:layout_height="wrap_content"/>
55 <Space style="@style/empty_space"/> 55 <Space style="@style/empty_space"/>
56 <LinearLayout 56 <LinearLayout
57 android:orientation="horizontal" 57 android:orientation="horizontal"
58 android:gravity="center_vertical" 58 android:gravity="center_vertical"
59 android:layout_width="match_parent" 59 android:layout_width="match_parent"
60 android:layout_height="wrap_content"> 60 android:layout_height="wrap_content">
61 <TextView 61 <TextView
62 android:id="@+id/tvGrade" 62 android:id="@+id/tvGrade"
63 tools:text="七年级-上学期" 63 tools:text="七年级-上学期"
64 android:textSize="10sp" 64 android:textSize="10sp"
65 android:textColor="#666" 65 android:textColor="#666"
66 android:layout_width="wrap_content" 66 android:layout_width="wrap_content"
67 android:layout_height="wrap_content" /> 67 android:layout_height="wrap_content" />
68 <Space style="@style/empty_space"/> 68 <Space style="@style/empty_space"/>
69 <androidx.appcompat.widget.AppCompatTextView 69 <androidx.appcompat.widget.AppCompatTextView
70 android:id="@+id/btnDelete"
70 android:text="删除" 71 android:text="删除"
71 android:textSize="10sp" 72 android:textSize="10sp"
72 android:textColor="#666" 73 android:textColor="#666"
73 android:gravity="center_vertical" 74 android:gravity="center_vertical"
74 android:drawableStart="@drawable/svg_delete" 75 android:drawableStart="@drawable/svg_delete"
75 android:drawableTint="#C5C5C5" 76 android:drawableTint="#C5C5C5"
76 android:drawablePadding="2dp" 77 android:drawablePadding="2dp"
77 android:layout_width="wrap_content" 78 android:layout_width="wrap_content"
78 android:layout_height="wrap_content"/> 79 android:layout_height="wrap_content"/>
79 <View 80 <View
80 android:background="#F5F5F5" 81 android:background="#F5F5F5"
81 android:layout_marginHorizontal="15dp" 82 android:layout_marginHorizontal="15dp"
82 android:layout_width="1dp" 83 android:layout_width="1dp"
83 android:layout_height="10dp"/> 84 android:layout_height="10dp"/>
84 <androidx.appcompat.widget.AppCompatTextView 85 <androidx.appcompat.widget.AppCompatTextView
86 android:id="@+id/btnDetail"
85 android:text="详情" 87 android:text="详情"
86 android:textSize="10sp" 88 android:textSize="10sp"
87 android:textColor="#666" 89 android:textColor="#666"
88 android:gravity="center_vertical" 90 android:gravity="center_vertical"
89 android:drawableStart="@drawable/svg_go_detail" 91 android:drawableStart="@drawable/svg_go_detail"
90 android:drawablePadding="5dp" 92 android:drawablePadding="5dp"
91 android:layout_width="wrap_content" 93 android:layout_width="wrap_content"
92 android:layout_height="wrap_content"/> 94 android:layout_height="wrap_content"/>
93 </LinearLayout> 95 </LinearLayout>
94 </LinearLayout> 96 </LinearLayout>
95 </LinearLayout> 97 </LinearLayout>
96 <TextView 98 <TextView
97 android:id="@+id/tvFlag" 99 android:id="@+id/tvFlag"
98 android:text="已反馈" 100 android:text="已反馈"
99 android:textSize="9sp" 101 android:textSize="9sp"
100 android:textColor="@color/white" 102 android:textColor="@color/white"
101 android:background="@drawable/bg_homework_feedback_flag" 103 android:background="@drawable/bg_homework_feedback_flag"
102 android:layout_gravity="end" 104 android:layout_gravity="end"
103 android:paddingHorizontal="7dp" 105 android:paddingHorizontal="7dp"
104 android:paddingVertical="2dp" 106 android:paddingVertical="2dp"
105 android:layout_width="wrap_content" 107 android:layout_width="wrap_content"
106 android:layout_height="wrap_content" /> 108 android:layout_height="wrap_content" />
107 </FrameLayout> 109 </FrameLayout>
108 110
109 </LinearLayout> 111 </LinearLayout>