|
|
@@ -3,6 +3,7 @@ package com.benyanyi.picker;
|
|
|
import android.app.Dialog;
|
|
|
import android.content.Context;
|
|
|
import android.os.Bundle;
|
|
|
+import android.text.TextUtils;
|
|
|
import android.util.DisplayMetrics;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
@@ -29,6 +30,9 @@ import java.util.Map;
|
|
|
* @overview
|
|
|
*/
|
|
|
class PickerDialog extends Dialog {
|
|
|
+
|
|
|
+ private boolean isCache;
|
|
|
+
|
|
|
private RecyclerView titleRecycler;
|
|
|
// private View titleView;
|
|
|
private RecyclerView msgRecycler;
|
|
|
@@ -40,25 +44,21 @@ class PickerDialog extends Dialog {
|
|
|
/**
|
|
|
* 数据源
|
|
|
*/
|
|
|
- private List<PickerBean<?>> oList = new ArrayList<>();
|
|
|
-
|
|
|
private Map<String, List<PickerBean<?>>> oMap = new HashMap<>();
|
|
|
|
|
|
/**
|
|
|
* 标题数据
|
|
|
*/
|
|
|
- private List<String> titleList = new ArrayList<>();
|
|
|
+ private Map<String, List<String>> titleMap = new HashMap<>();
|
|
|
|
|
|
/**
|
|
|
* 每次选择位于数据源对应的下标
|
|
|
*/
|
|
|
- private List<Integer> indexList = new ArrayList<>();
|
|
|
-
|
|
|
+ private Map<String, List<Integer>> indexMap = new HashMap<>();
|
|
|
/**
|
|
|
* 内容数据
|
|
|
*/
|
|
|
- private List<PickerBean<?>> msgList = new ArrayList<>();
|
|
|
-
|
|
|
+ private Map<String, List<PickerBean<?>>> msgMap = new HashMap<>();
|
|
|
/**
|
|
|
* map对应的key
|
|
|
*/
|
|
|
@@ -71,19 +71,20 @@ class PickerDialog extends Dialog {
|
|
|
|
|
|
private int index = -1;
|
|
|
|
|
|
- public PickerDialog(@NonNull Context context) {
|
|
|
+ public PickerDialog(@NonNull Context context, boolean isCache) {
|
|
|
super(context);
|
|
|
+ this.isCache = isCache;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
super.onCreate(savedInstanceState);
|
|
|
setContentView(R.layout.weight_picker_view);
|
|
|
- titleRecycler = findViewById(R.id.picker_title_recycler);
|
|
|
+ this.titleRecycler = findViewById(R.id.picker_title_recycler);
|
|
|
// titleView = findViewById(R.id.picker_title_view);
|
|
|
- msgRecycler = findViewById(R.id.picker_msg_recycler);
|
|
|
- titleTv = findViewById(R.id.picker_title);
|
|
|
- titleTv.setText(title);
|
|
|
+ this.msgRecycler = findViewById(R.id.picker_msg_recycler);
|
|
|
+ this.titleTv = findViewById(R.id.picker_title);
|
|
|
+ this.titleTv.setText(this.title);
|
|
|
findViewById(R.id.picker_cancel).setOnClickListener(new View.OnClickListener() {
|
|
|
@Override
|
|
|
public void onClick(View v) {
|
|
|
@@ -100,42 +101,41 @@ class PickerDialog extends Dialog {
|
|
|
private void initTitle() {
|
|
|
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
|
|
|
layoutManager.setOrientation(RecyclerView.HORIZONTAL);
|
|
|
- titleRecycler.setLayoutManager(layoutManager);
|
|
|
- titleAdapter = new PickerTitleAdapter(getContext(), titleList);
|
|
|
- titleRecycler.setAdapter(titleAdapter);
|
|
|
- titleAdapter.setOnItemListener(new BaseDialogRecyclerAdapter.OnItemListener() {
|
|
|
+ this.titleRecycler.setLayoutManager(layoutManager);
|
|
|
+ this.titleAdapter = new PickerTitleAdapter(getContext(), this.titleMap.get(this.title));
|
|
|
+ this.titleRecycler.setAdapter(this.titleAdapter);
|
|
|
+ this.titleAdapter.setOnItemListener(new BaseDialogRecyclerAdapter.OnItemListener() {
|
|
|
@Override
|
|
|
public void onItemListener(int position) {//标题栏点击事件
|
|
|
- index = position;
|
|
|
- if (DataUtil.isListNotEmpty(oList)) {
|
|
|
- List<String> list = new ArrayList<>(titleList);
|
|
|
- List<Integer> iList = new ArrayList<>(indexList);
|
|
|
+ PickerDialog.this.index = position;
|
|
|
+ if (DataUtil.isListNotEmpty(PickerDialog.this.oMap.get(PickerDialog.this.title))) {
|
|
|
+ List<String> list = new ArrayList<>(PickerDialog.this.titleMap.get(PickerDialog.this.title));
|
|
|
+ List<Integer> iList = new ArrayList<>(PickerDialog.this.indexMap.get(PickerDialog.this.title));
|
|
|
if (DataUtil.isListNotEmpty(list) && position < list.size() - 1) {
|
|
|
- titleList.clear();
|
|
|
- indexList.clear();
|
|
|
- msgList.clear();
|
|
|
- for (int i = 0; i <= position; i++) {
|
|
|
- titleList.add(list.get(i));
|
|
|
- indexList.add(iList.get(i));
|
|
|
+ PickerDialog.this.titleMap.get(PickerDialog.this.title).clear();
|
|
|
+ PickerDialog.this.indexMap.get(PickerDialog.this.title).clear();
|
|
|
+ PickerDialog.this.msgMap.get(PickerDialog.this.title).clear();
|
|
|
+ for (int i = 0; i <= PickerDialog.this.index; i++) {
|
|
|
+ PickerDialog.this.titleMap.get(PickerDialog.this.title).add(list.get(i));
|
|
|
+ PickerDialog.this.indexMap.get(PickerDialog.this.title).add(iList.get(i));
|
|
|
}
|
|
|
- if (DataUtil.isListNotEmpty(indexList)) {
|
|
|
- msgAdapter.setSelectPosition(indexList.get(position));
|
|
|
+ if (DataUtil.isListNotEmpty(PickerDialog.this.indexMap.get(PickerDialog.this.title))) {
|
|
|
+ PickerDialog.this.msgAdapter.setSelectPosition(PickerDialog.this.indexMap.get(PickerDialog.this.title).get(PickerDialog.this.index));
|
|
|
} else {
|
|
|
- titleList.add("请选择");
|
|
|
- msgAdapter.setSelectPosition(-1);
|
|
|
+ PickerDialog.this.titleMap.get(PickerDialog.this.title).add("请选择");
|
|
|
+ PickerDialog.this.msgAdapter.setSelectPosition(-1);
|
|
|
}
|
|
|
if (position == 0) {
|
|
|
- msgList.addAll(oList);
|
|
|
+ PickerDialog.this.msgMap.get(PickerDialog.this.title).addAll(PickerDialog.this.oMap.get(PickerDialog.this.title));
|
|
|
} else {
|
|
|
- PickerBean pickerBean = null;
|
|
|
- for (int i = 1; i <= position; i++) {
|
|
|
- pickerBean = oList.get(indexList.get(position - 1));
|
|
|
- }
|
|
|
- msgList.addAll(pickerBean.getList());
|
|
|
+ PickerBean pickerBean = PickerDialog.this.oMap.get(PickerDialog.this.title).get(PickerDialog.this.indexMap.get(PickerDialog.this.title).get(PickerDialog.this.indexMap.get(PickerDialog.this.title).size() - 1));
|
|
|
+ PickerDialog.this.msgMap.get(PickerDialog.this.title).addAll(pickerBean.getList());
|
|
|
}
|
|
|
- titleAdapter.notifyDataSetChanged(titleList);
|
|
|
+ PickerDialog.this.titleAdapter.notifyDataSetChanged(PickerDialog.this.titleMap.get(PickerDialog.this.title));
|
|
|
// tabSelectedIndicatorAnimation(titleAdapter.getTextView()).start();
|
|
|
- msgAdapter.notifyDataSetChanged(msgList);
|
|
|
+ PickerDialog.this.msgAdapter.notifyDataSetChanged(PickerDialog.this.msgMap.get(PickerDialog.this.title));
|
|
|
+ PickerDialog.this.titleRecycler.scrollToPosition(PickerDialog.this.titleMap.get(PickerDialog.this.title).size() - 1);
|
|
|
+ PickerDialog.this.msgRecycler.scrollToPosition(PickerDialog.this.indexMap.get(PickerDialog.this.title).get(PickerDialog.this.index));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -143,42 +143,43 @@ class PickerDialog extends Dialog {
|
|
|
}
|
|
|
|
|
|
private void initMsg() {
|
|
|
- msgRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
|
|
|
- msgAdapter = new PickerMsgAdapter(getContext(), msgList);
|
|
|
- msgRecycler.setAdapter(msgAdapter);
|
|
|
- msgAdapter.setOnItemListener(new BaseDialogRecyclerAdapter.OnItemListener() {
|
|
|
+ PickerDialog.this.msgRecycler.setLayoutManager(new LinearLayoutManager(getContext()));
|
|
|
+ PickerDialog.this.msgAdapter = new PickerMsgAdapter(getContext(), PickerDialog.this.msgMap.get(PickerDialog.this.title));
|
|
|
+ PickerDialog.this.msgRecycler.setAdapter(PickerDialog.this.msgAdapter);
|
|
|
+ PickerDialog.this.msgAdapter.setOnItemListener(new BaseDialogRecyclerAdapter.OnItemListener() {
|
|
|
@Override
|
|
|
public void onItemListener(int position) {
|
|
|
- if (msgList.size() > 0) {
|
|
|
- PickerBean bean = msgList.get(position);
|
|
|
- if (index > -1) {
|
|
|
- indexList.set(index, position);
|
|
|
- index = -1;
|
|
|
+ if (PickerDialog.this.msgMap.get(PickerDialog.this.title).size() > 0) {
|
|
|
+ PickerBean bean = PickerDialog.this.msgMap.get(PickerDialog.this.title).get(position);
|
|
|
+ if (PickerDialog.this.index > -1) {
|
|
|
+ PickerDialog.this.indexMap.get(PickerDialog.this.title).set(PickerDialog.this.indexMap.get(PickerDialog.this.title).size() - 1, position);
|
|
|
+ PickerDialog.this.index = -1;
|
|
|
} else {
|
|
|
- indexList.add(position);
|
|
|
+ PickerDialog.this.indexMap.get(PickerDialog.this.title).add(position);
|
|
|
}
|
|
|
|
|
|
- titleList.set(titleList.size() - 1, bean.getName());
|
|
|
- titleAdapter.notifyDataSetChanged(titleList);
|
|
|
- msgAdapter.setSelectPosition(position);
|
|
|
- msgAdapter.notifyItemChanged(position);
|
|
|
+ PickerDialog.this.titleMap.get(PickerDialog.this.title).set(PickerDialog.this.titleMap.get(PickerDialog.this.title).size() - 1, bean.getName());
|
|
|
+ PickerDialog.this.titleAdapter.notifyDataSetChanged(PickerDialog.this.titleMap.get(PickerDialog.this.title));
|
|
|
+ PickerDialog.this.msgAdapter.setSelectPosition(position);
|
|
|
+ PickerDialog.this.msgAdapter.notifyItemChanged(position);
|
|
|
if (DataUtil.isListNotEmpty(bean.getList())) {
|
|
|
- titleList.add("请选择");
|
|
|
- msgList.clear();
|
|
|
- msgList.addAll(bean.getList());
|
|
|
- msgAdapter.setSelectPosition(-1);
|
|
|
- msgAdapter.notifyDataSetChanged(msgList);
|
|
|
+ PickerDialog.this.titleMap.get(PickerDialog.this.title).add("请选择");
|
|
|
+ PickerDialog.this.msgMap.get(PickerDialog.this.title).clear();
|
|
|
+ PickerDialog.this.msgMap.get(PickerDialog.this.title).addAll(bean.getList());
|
|
|
+ PickerDialog.this.msgAdapter.setSelectPosition(-1);
|
|
|
+ PickerDialog.this.msgAdapter.notifyDataSetChanged(PickerDialog.this.msgMap.get(PickerDialog.this.title));
|
|
|
+ PickerDialog.this.msgRecycler.scrollToPosition(0);
|
|
|
// tabSelectedIndicatorAnimation(titleAdapter.getTextView()).start();
|
|
|
} else {
|
|
|
dismiss();
|
|
|
- if (pickerCallback != null) {
|
|
|
- pickerCallback.callback(titleList, indexList);
|
|
|
+ if (PickerDialog.this.pickerCallback != null) {
|
|
|
+ PickerDialog.this.pickerCallback.callback(PickerDialog.this.titleMap.get(PickerDialog.this.title), PickerDialog.this.indexMap.get(PickerDialog.this.title));
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
dismiss();
|
|
|
- if (pickerCallback != null) {
|
|
|
- pickerCallback.callback(new ArrayList<String>(), new ArrayList<Integer>());
|
|
|
+ if (PickerDialog.this.pickerCallback != null) {
|
|
|
+ PickerDialog.this.pickerCallback.callback(new ArrayList<String>(), new ArrayList<Integer>());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -204,40 +205,71 @@ class PickerDialog extends Dialog {
|
|
|
window.setBackgroundDrawableResource(android.R.color.transparent);
|
|
|
}
|
|
|
|
|
|
- public void setTitle(String title) {
|
|
|
- this.title = title;
|
|
|
- if (titleTv != null) {
|
|
|
- titleTv.setText(title);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public <T extends PickerBean<?>> void setData(List<T> list) {
|
|
|
- this.oList = (List<PickerBean<?>>) list;
|
|
|
- }
|
|
|
-
|
|
|
public void setPickerCallback(PickerHelper.PickerCallback pickerCallback) {
|
|
|
this.pickerCallback = pickerCallback;
|
|
|
}
|
|
|
|
|
|
- @Override
|
|
|
- public void show() {
|
|
|
+ public <T extends PickerBean<?>> void show(String title, List<T> list) {
|
|
|
super.show();
|
|
|
- if (DataUtil.isListEmpty(indexList)) {
|
|
|
- titleList.clear();
|
|
|
- indexList.clear();
|
|
|
- msgList.clear();
|
|
|
- index = -1;
|
|
|
- titleList.add("请选择");
|
|
|
- msgList.addAll(oList);
|
|
|
+ this.key = title;
|
|
|
+ List<T> l = list;
|
|
|
+ if (!isNotEmpty(this.key)) {
|
|
|
+ this.key = "dialog";
|
|
|
+ }
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ l = new ArrayList<>();
|
|
|
+ }
|
|
|
+ if (isCache && !this.key.equals("dialog") && !this.oMap.isEmpty() && DataUtil.isListNotEmpty(oMap.get(this.key))) {
|
|
|
+ if (DataUtil.isListEmpty(indexMap.get(this.key))) {
|
|
|
+ this.titleMap.put(this.key, new ArrayList<String>());
|
|
|
+ this.indexMap.put(this.key, new ArrayList<Integer>());
|
|
|
+ this.msgMap.put(this.key, new ArrayList<PickerBean<?>>());
|
|
|
+ this.index = -1;
|
|
|
+ this.titleMap.get(this.key).add("请选择");
|
|
|
+ this.msgMap.get(this.key).addAll(oMap.get(this.key));
|
|
|
+ } else {
|
|
|
+ index = indexMap.get(this.key).get(indexMap.get(this.key).size() - 1);
|
|
|
+ }
|
|
|
+ this.title = this.key;
|
|
|
} else {
|
|
|
- if (DataUtil.isListNotEmpty(titleList)) {
|
|
|
- index = titleList.size() - 1;
|
|
|
+ this.oMap.put(this.key, (List<PickerBean<?>>) l);
|
|
|
+ this.titleMap.put(this.key, new ArrayList<String>());
|
|
|
+ this.indexMap.put(this.key, new ArrayList<Integer>());
|
|
|
+ this.msgMap.put(this.key, new ArrayList<PickerBean<?>>());
|
|
|
+ this.index = -1;
|
|
|
+ this.titleMap.get(this.key).add("请选择");
|
|
|
+ this.msgMap.get(this.key).addAll(oMap.get(this.key));
|
|
|
+ if (this.key.equals("dialog")) {
|
|
|
+ this.title = "";
|
|
|
+ } else {
|
|
|
+ this.title = this.key;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ if (this.titleTv != null) {
|
|
|
+ if (TextUtils.isEmpty(this.title)) {
|
|
|
+ this.titleTv.setText("");
|
|
|
} else {
|
|
|
- index = -1;
|
|
|
+ this.titleTv.setText(this.title);
|
|
|
}
|
|
|
}
|
|
|
- titleAdapter.notifyDataSetChanged(titleList);
|
|
|
- msgAdapter.notifyDataSetChanged(msgList);
|
|
|
+ this.msgAdapter.setSelectPosition(this.index);
|
|
|
+ this.titleAdapter.notifyDataSetChanged(this.titleMap.get(this.title));
|
|
|
+ this.msgAdapter.notifyDataSetChanged(this.msgMap.get(this.title));
|
|
|
+ if (DataUtil.isListNotEmpty(this.titleMap.get(this.title))) {
|
|
|
+ this.titleRecycler.scrollToPosition(this.titleMap.get(this.title).size() - 1);
|
|
|
+ } else {
|
|
|
+ this.titleRecycler.scrollToPosition(0);
|
|
|
+ }
|
|
|
+ if (DataUtil.isListNotEmpty(this.indexMap.get(this.title))) {
|
|
|
+ this.msgRecycler.scrollToPosition(this.index);
|
|
|
+ } else {
|
|
|
+ this.msgRecycler.scrollToPosition(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean isNotEmpty(String str) {
|
|
|
+ return str != null && !TextUtils.isEmpty(str) && !"null".equals(str) && !str.trim().isEmpty();
|
|
|
}
|
|
|
|
|
|
// /**
|