AndroidPicker
AndroidPicker copied to clipboard
LinkageProvider 如何传对象数组进去
仿照dome的AntFortuneLikeProvider ,里面的provideFirstData与linkageSecondData 都只能用List<Sring>,如果是对象数组,显示的都是直接tostring之后的结果,对象在这里面怎么用?
对象数组的数,你的对象实现TextProvider接口即可,可参阅AddressPicker的com.github.gzuliyujiang.wheelpicker.impl.AddressProvider如:
public class AddressProvider implements LinkageProvider {
private final List<ProvinceEntity> data;
private final int mode;
public AddressProvider(@NonNull List<ProvinceEntity> data, int mode) {
this.data = data;
this.mode = mode;
}
@Override
public boolean firstLevelVisible() {
return mode == AddressMode.PROVINCE_CITY_COUNTY || mode == AddressMode.PROVINCE_CITY;
}
@Override
public boolean thirdLevelVisible() {
return mode == AddressMode.PROVINCE_CITY_COUNTY || mode == AddressMode.CITY_COUNTY;
}
@NonNull
@Override
public List<ProvinceEntity> provideFirstData() {
return data;
}
@NonNull
@Override
public List<CityEntity> linkageSecondData(int firstIndex) {
if (data.size() == 0) {
return new ArrayList<>();
}
if (firstIndex == INDEX_NO_FOUND) {
firstIndex = 0;
}
return data.get(firstIndex).getCityList();
}
@NonNull
@Override
public List<CountyEntity> linkageThirdData(int firstIndex, int secondIndex) {
List<CityEntity> data = linkageSecondData(firstIndex);
if (data.size() == 0) {
return new ArrayList<>();
}
if (secondIndex == INDEX_NO_FOUND) {
secondIndex = 0;
}
return data.get(secondIndex).getCountyList();
}
@Override
public int findFirstIndex(Object firstValue) {
if (firstValue == null) {
return INDEX_NO_FOUND;
}
if (firstValue instanceof ProvinceEntity) {
return data.indexOf(firstValue);
}
for (int i = 0, n = data.size(); i < n; i++) {
ProvinceEntity entity = data.get(i);
if (entity.getCode().equals(firstValue.toString()) ||
entity.getName().contains(firstValue.toString())) {
return i;
}
}
return INDEX_NO_FOUND;
}
@Override
public int findSecondIndex(int firstIndex, Object secondValue) {
if (secondValue == null) {
return INDEX_NO_FOUND;
}
List<CityEntity> cityList = linkageSecondData(firstIndex);
if (secondValue instanceof CityEntity) {
return cityList.indexOf(secondValue);
}
for (int i = 0, n = cityList.size(); i < n; i++) {
CityEntity entity = cityList.get(i);
if (entity.getCode().equals(secondValue.toString()) ||
entity.getName().contains(secondValue.toString())) {
return i;
}
}
return INDEX_NO_FOUND;
}
@Override
public int findThirdIndex(int firstIndex, int secondIndex, Object thirdValue) {
if (thirdValue == null) {
return INDEX_NO_FOUND;
}
List<CountyEntity> countyList = linkageThirdData(firstIndex, secondIndex);
if (thirdValue instanceof CountyEntity) {
return countyList.indexOf(thirdValue);
}
for (int i = 0, n = countyList.size(); i < n; i++) {
CountyEntity entity = countyList.get(i);
if (entity.getCode().equals(thirdValue.toString()) ||
entity.getName().contains(thirdValue.toString())) {
return i;
}
}
return INDEX_NO_FOUND;
}
}
class AddressEntity implements TextProvider, Serializable {
private String code;
private String name;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String provideText() {
return name;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
AddressEntity that = (AddressEntity) o;
return Objects.equals(code, that.code) &&
Objects.equals(name, that.name);
}
@Override
public int hashCode() {
return Objects.hash(code, name);
}
@NonNull
@Override
public String toString() {
return "AddressEntity{" +
"code='" + code + '\'' +
", name='" + name + '\'' +
'}';
}
}