Commit e65e4db2 authored by hywang's avatar hywang

1.增加基础信息上传验证标签重复并修改功能。

parent 09b7a290
......@@ -9,8 +9,8 @@ android {
applicationId "com.phlx.anchorcollect_p"
minSdkVersion 21
targetSdkVersion 29
versionCode 19
versionName "2.1.3"
versionCode 20
versionName "2.2.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
......@@ -111,4 +111,5 @@ dependencies {
//表格
// implementation 'com.github.Lingber:Android_DataGridView:1.01'
}
\ No newline at end of file
......@@ -97,6 +97,11 @@
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.labelchange.list.ExchangeListActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:launchMode="singleTask"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".ui.feedback.FeedbackActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
......
......@@ -14,6 +14,7 @@ import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.entity.LoginData;
import com.phlx.anchorcollect_p.entity.MedicalRecordEntity;
import com.phlx.anchorcollect_p.entity.PerformanceEntity;
......@@ -90,7 +91,7 @@ public class Repository extends BaseModel implements HttpDataSource, LocalDataSo
}
@Override
public Observable<ListResponse<Long>> uploadCattleList(RequestBody body) {
public Observable<ListResponse<InspectEntity>> uploadCattleList(RequestBody body) {
return mHttpDataSource.uploadCattleList(body);
}
......
......@@ -19,6 +19,7 @@ import com.phlx.anchorcollect_p.ui.fragment.vm.WeightManVM;
import com.phlx.anchorcollect_p.ui.home.HomeVM;
import com.phlx.anchorcollect_p.ui.info.CattleVM;
import com.phlx.anchorcollect_p.ui.labelchange.LabelChangeVM;
import com.phlx.anchorcollect_p.ui.labelchange.list.ExchangeListVM;
import com.phlx.anchorcollect_p.ui.login.LoginVM;
import com.phlx.anchorcollect_p.ui.main.MainVM;
import com.phlx.anchorcollect_p.ui.setting.SettingVM;
......@@ -108,6 +109,8 @@ public class VMFactory extends ViewModelProvider.NewInstanceFactory {
return (T) new SettingVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(LabelChangeVM.class)) {
return (T) new LabelChangeVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(ExchangeListVM.class)) {
return (T) new ExchangeListVM(mApplication, repository);
} else if (modelClass.isAssignableFrom(FeedbackVM.class)) {
return (T) new FeedbackVM(mApplication, repository);
......
......@@ -10,6 +10,7 @@ import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.entity.LoginData;
import com.phlx.anchorcollect_p.entity.MedicalRecordEntity;
import com.phlx.anchorcollect_p.entity.PerformanceEntity;
......@@ -89,7 +90,7 @@ public interface ApiService {
*/
@Headers({"Content-Type: application/json", "Accept: application/json"})
@POST("/api/cattleresume/add")
Observable<ListResponse<Long>> uploadCattleList(@Body RequestBody body);
Observable<ListResponse<InspectEntity>> uploadCattleList(@Body RequestBody body);
/**
* 获取性能测定列表
......
......@@ -10,6 +10,7 @@ import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.entity.LoginData;
import com.phlx.anchorcollect_p.entity.MedicalRecordEntity;
import com.phlx.anchorcollect_p.entity.PerformanceEntity;
......@@ -67,7 +68,7 @@ public interface HttpDataSource {
/**
* 上传基础信息列表
*/
Observable<ListResponse<Long>> uploadCattleList(@Body RequestBody body);
Observable<ListResponse<InspectEntity>> uploadCattleList(@Body RequestBody body);
/**
* 获取字典项列表
......
......@@ -10,6 +10,7 @@ import com.phlx.anchorcollect_p.entity.FeedbackEntity;
import com.phlx.anchorcollect_p.entity.GenData;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.entity.LoginData;
import com.phlx.anchorcollect_p.entity.MedicalRecordEntity;
import com.phlx.anchorcollect_p.entity.PerformanceEntity;
......@@ -82,7 +83,7 @@ public class HttpDataSourceImpl implements HttpDataSource {
}
@Override
public Observable<ListResponse<Long>> uploadCattleList(RequestBody body) {
public Observable<ListResponse<InspectEntity>> uploadCattleList(RequestBody body) {
return apiService.uploadCattleList(body);
}
......
package com.phlx.anchorcollect_p.entity;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import androidx.databinding.BaseObservable;
public class InspectEntity extends BaseObservable implements Parcelable {
String unid;
/**
* 1 电子耳标重复
* 2 可视耳标重复
* 3 全部重复
*/
int type;
public InspectEntity() {
}
protected InspectEntity(Parcel in) {
unid = in.readString();
type = in.readInt();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(unid);
dest.writeInt(type);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<InspectEntity> CREATOR = new Creator<InspectEntity>() {
@Override
public InspectEntity createFromParcel(Parcel in) {
return new InspectEntity(in);
}
@Override
public InspectEntity[] newArray(int size) {
return new InspectEntity[size];
}
};
public String getUnid() {
return unid;
}
public void setUnid(String unid) {
this.unid = unid;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@NonNull
@Override
public String toString() {
return "InspectEntity{" +
"unid='" + unid + '\'' +
", type=" + type +
'}';
}
}
......@@ -58,7 +58,7 @@ public class RetrofitClient {
public static String port =
""//正式
// "9000"//阿里云测试
// "9000"//董
// "8099"//董
;
private static Context mContext = Utils.getContext();
......
......@@ -582,7 +582,7 @@ public class BasicsCollectFragment extends BaseFragment<FragmentBasicsCollectBin
Window dialogWindow = mDialog.getWindow();
if (dialogWindow != null) {
dialogWindow.setWindowAnimations(com.bigkoo.pickerview.R.style.picker_view_slide_anim);//修改动画样式
dialogWindow.setWindowAnimations(R.style.picker_view_slide_anim);//修改动画样式
dialogWindow.setGravity(Gravity.CENTER);//改成Bottom,底部显示
dialogWindow.setDimAmount(0.3f);
}
......
......@@ -14,6 +14,8 @@ import com.phlx.anchorcollect_p.BR;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.databinding.ActivityLabelChangeBinding;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.rfid.ModuleManager;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import com.phlx.anchorcollect_p.util.ImagePicker;
......@@ -26,6 +28,9 @@ public class LabelChangeActivity extends BaseActivity<ActivityLabelChangeBinding
private String epc, noticeNo;
private CattleResumeEntity entity;
private InspectEntity inspectEntity;
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_label_change;
......@@ -44,6 +49,8 @@ public class LabelChangeActivity extends BaseActivity<ActivityLabelChangeBinding
if (_bundle != null) {
epc = _bundle.getString("epc");
noticeNo = _bundle.getString("noticeNo");
entity = _bundle.getParcelable("entity");
inspectEntity = _bundle.getParcelable("inspectEntity");
}
}
......@@ -57,7 +64,7 @@ public class LabelChangeActivity extends BaseActivity<ActivityLabelChangeBinding
public void initData() {
super.initData();
viewModel.initToolbar(epc, noticeNo);
viewModel.initToolbar(epc, noticeNo, entity, inspectEntity);
}
@Override
......
......@@ -21,6 +21,7 @@ import com.phlx.anchorcollect_p.db.DbUtil;
import com.phlx.anchorcollect_p.db.interf.DbIDUCallBack;
import com.phlx.anchorcollect_p.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.rfid.ModuleManager;
import com.phlx.anchorcollect_p.ui.base.BackBarVM;
import com.phlx.anchorcollect_p.ui.login.LoginActivity;
......@@ -62,6 +63,7 @@ public class LabelChangeVM extends BackBarVM<Repository> implements OnInventoryL
public ObservableField<String> epc = new ObservableField<>();
public ObservableField<String> noticeNo = new ObservableField<>();
public ObservableField<InspectEntity> inspectEntity = new ObservableField<>();
private boolean isModify;
......@@ -80,19 +82,28 @@ public class LabelChangeVM extends BackBarVM<Repository> implements OnInventoryL
musicId = new SparseIntArray();
musicId.put(1, soundPool.load(getApplication(), R.raw.readcard, 1));
musicId.put(2, soundPool.load(getApplication(), R.raw.failure, 1));
uploadData = new ArrayList<>();
}
//初始化ToolBar
public void initToolbar(String epc, String noticeNo) {
public void initToolbar(String epc, String noticeNo, CattleResumeEntity entity, InspectEntity inspectEntity) {
setBackTitleText(getApplication().getResources().getString(R.string.label_change));
setSettingVisibleObservable(View.GONE);
setBackRightTextVisible(View.VISIBLE);
setBackRightText(getApplication().getResources().getString(R.string.save));
this.epc.set(epc);
this.noticeNo.set(noticeNo);
if (entity == null) {
this.epc.set(epc);
this.noticeNo.set(noticeNo);
getCattleResume();
} else {
this.epc.set(entity.getRegistrationNo());
this.noticeNo.set(entity.getIndividualNo());
this.entity.copyEntity(entity);
this.inspectEntity.set(inspectEntity);
}
getCattleResume();
}
......@@ -107,7 +118,6 @@ public class LabelChangeVM extends BackBarVM<Repository> implements OnInventoryL
private void initData() {
uploadData = new ArrayList<>();
epc.set(entity.getRegistrationNo());
noticeNo.set(entity.getIndividualNo());
// entity.notifyChange();
......
package com.phlx.anchorcollect_p.ui.labelchange.list;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableField;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.ui.labelchange.LabelChangeActivity;
import me.goldze.mvvmhabit.base.ItemViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
public class ExchangeItem extends ItemViewModel<ExchangeListVM> {
public ObservableField<InspectEntity> inspectEntity = new ObservableField<>();
public ObservableField<CattleResumeEntity> entity = new ObservableField<>();
public ObservableField<String> inspectString = new ObservableField<>("");
public ExchangeItem(@NonNull ExchangeListVM viewModel,CattleResumeEntity entity, InspectEntity inspectEntity) {
super(viewModel);
this.inspectEntity.set(inspectEntity);
this.entity.set(entity);
//1 电子耳标重复
// * 2 可视耳标重复
// * 3 全部重复
switch (inspectEntity.getType()) {
case 1:
inspectString.set("电子耳标重复");
break;
case 2:
inspectString.set("可视耳标重复");
break;
case 3:
inspectString.set("电子耳标、可视耳标全部重复");
break;
default:
break;
}
}
public BindingCommand onItemClick = new BindingCommand(new BindingAction() {
@Override
public void call() {
Bundle mBundle = new Bundle();
mBundle.putParcelable("entity", entity.get());
mBundle.putParcelable("inspectEntity", inspectEntity.get());
viewModel.startActivity(LabelChangeActivity.class, mBundle);
}
});
}
package com.phlx.anchorcollect_p.ui.labelchange.list;
import android.os.Bundle;
import androidx.lifecycle.ViewModelProviders;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.databinding.ActivityExchangeListBinding;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import java.util.List;
import me.tatarka.bindingcollectionadapter2.BR;
public class ExchangeListActivity extends BaseActivity<ActivityExchangeListBinding, ExchangeListVM> {
List<InspectEntity> inspectEntities;
@Override
public int initContentView(Bundle savedInstanceState) {
return R.layout.activity_exchange_list;
}
@Override
public int initVariableId() {
return BR.viewModel;
}
@Override
public void initParam() {
super.initParam();
Bundle _bundle = getIntent().getExtras();
if (_bundle != null) {
inspectEntities = _bundle.getParcelableArrayList("inspectEntityList");
}
}
@Override
public ExchangeListVM initViewModel() {
VMFactory factory = VMFactory.getInstance(getApplication());
return ViewModelProviders.of(this, factory).get(ExchangeListVM.class);
}
@Override
public void initData() {
super.initData();
viewModel.initToolbar(inspectEntities);
}
@Override
public void initViewObservable() {
super.initViewObservable();
}
}
package com.phlx.anchorcollect_p.ui.labelchange.list;
import android.app.Application;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import com.phlx.anchorcollect_p.BR;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.Repository;
import com.phlx.anchorcollect_p.db.DbUtil;
import com.phlx.anchorcollect_p.db.gen.CattleResumeEntityDao;
import com.phlx.anchorcollect_p.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.ui.base.BackBarVM;
import org.greenrobot.greendao.query.QueryBuilder;
import java.util.List;
import me.goldze.mvvmhabit.utils.ToastUtils;
import me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter;
import me.tatarka.bindingcollectionadapter2.ItemBinding;
public class ExchangeListVM extends BackBarVM<Repository> {
List<InspectEntity> inspectEntities;
//给RecyclerView添加ObservableList
public ObservableList<ExchangeItem> observableList = new ObservableArrayList<>();
//给RecyclerView添加ItemBinding
public ItemBinding<ExchangeItem> itemBinding = ItemBinding.of(BR.viewModel, R.layout.item_exchange_label);
public final BindingRecyclerViewAdapter<ExchangeItem> adapter = new BindingRecyclerViewAdapter<>();
public ExchangeListVM(@NonNull Application application, Repository model) {
super(application, model);
}
//初始化ToolBar
public void initToolbar(List<InspectEntity> inspectEntities) {
setBackTitleText(getApplication().getResources().getString(R.string.label_inspect));
setSettingVisibleObservable(View.GONE);
setBackRightTextVisible(View.GONE);
this.inspectEntities = inspectEntities;
initData();
}
private void initData() {
if (inspectEntities == null || inspectEntities.size() < 1) {
ToastUtils.showShort("无重复标签牛只");
finish();
} else {
queryState(0);
}
}
private void queryState(int position){
QueryBuilder<CattleResumeEntity> builder =
DbUtil.getInstance().getQueryBuilder(CattleResumeEntity.class)
.where(CattleResumeEntityDao.Properties.Unid.eq(inspectEntities.get(position).getUnid()));
int finalI = position;
DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CattleResumeEntity>() {
@Override
public void onSuccess(List<CattleResumeEntity> result) {
if (result != null && result.size() > 0) {
ExchangeItem exchangeItem = new ExchangeItem(ExchangeListVM.this, result.get(0), inspectEntities.get(finalI));
observableList.add(exchangeItem);
if(finalI>=inspectEntities.size()-1){
return;
}
queryState(finalI+1);
} else {
ToastUtils.showShort("无重复标签牛只信息");
}
}
@Override
public void onFailed() {
cn.wandersnail.commons.util.ToastUtils.showShort("查询基础信息失败!");
dismissDialog();
}
}).queryAsyncAll(CattleResumeEntity.class, builder);
}
}
......@@ -81,7 +81,8 @@ public class LoginVM extends BaseViewModel<Repository> {
userName.set(model.getUserName());
password.set(model.getPassword());
// userName.set("13614799150");
// userName.set("13664793087");
// password.set("Abgq3087@");
// userName.set("15047917803");
// password.set("Tpsq7803*");
......
......@@ -12,7 +12,11 @@ import com.phlx.anchorcollect_p.BR;
import com.phlx.anchorcollect_p.R;
import com.phlx.anchorcollect_p.data.VMFactory;
import com.phlx.anchorcollect_p.databinding.ActivitySyncBinding;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.ui.base.BaseActivity;
import com.phlx.anchorcollect_p.ui.labelchange.list.ExchangeListActivity;
import java.util.ArrayList;
public class SyncActivity extends BaseActivity<ActivitySyncBinding,SyncVM> {
@Override
......@@ -51,6 +55,36 @@ public class SyncActivity extends BaseActivity<ActivitySyncBinding,SyncVM> {
showTip(s);
}
});
viewModel.inspectEvent.observe(this, new Observer<ArrayList<InspectEntity>>() {
@Override
public void onChanged(ArrayList<InspectEntity> inspectEntities) {
new MaterialDialog.Builder(SyncActivity.this).title("系统信息").content("牛只耳标重复,请修改")
.cancelable(false).canceledOnTouchOutside(false)
.negativeText("取消")
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog materialDialog, @NonNull DialogAction dialogAction) {
materialDialog.dismiss();
viewModel.dismissDialog();
// finish();
}
})
.positiveText("修改").onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
if (which == DialogAction.POSITIVE) {
Bundle mBundle = new Bundle();
mBundle.putParcelableArrayList("inspectEntityList", inspectEntities);
startActivity(ExchangeListActivity.class, mBundle);
dialog.dismiss();
viewModel.dismissDialog();
}
}
}).show();
}
});
}
private void showTip(String content) {
......
......@@ -28,6 +28,7 @@ import com.phlx.anchorcollect_p.entity.CattleResumeEntity;
import com.phlx.anchorcollect_p.entity.ErrorEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchDetailEntity;
import com.phlx.anchorcollect_p.entity.ImmuneBatchEntity;
import com.phlx.anchorcollect_p.entity.InspectEntity;
import com.phlx.anchorcollect_p.entity.MedicalRecordEntity;
import com.phlx.anchorcollect_p.entity.PerformanceEntity;
import com.phlx.anchorcollect_p.entity.WeightManEntity;
......@@ -69,6 +70,9 @@ public class SyncVM extends BaseViewModel<Repository> {
//错误提示
public SingleLiveEvent<String> errorEvent = new SingleLiveEvent<>();
//耳标重复提示
public SingleLiveEvent<ArrayList<InspectEntity>> inspectEvent = new SingleLiveEvent<>();
public ObservableField<String> cattleresumeCount = new ObservableField<>("0");
public ObservableField<String> performanceCount = new ObservableField<>("0");
public ObservableField<String> weightManCount = new ObservableField<>("0");
......@@ -375,7 +379,7 @@ public class SyncVM extends BaseViewModel<Repository> {
.compose(RxUtils.schedulersTransformer())
.compose(RxUtils.exceptionTransformer())
// .doOnSubscribe(disposable -> showDialog("正在同步性能测定数据..."))
.subscribe((Consumer<ListResponse<Long>>) response -> {
.subscribe((Consumer<ListResponse<InspectEntity>>) response -> {
// dismissDialog();
KLog.e("uploadBaseArchives", response.toString());
......@@ -387,8 +391,9 @@ public class SyncVM extends BaseViewModel<Repository> {
if (response.getCode() == 0) {
if (response.getData() != null && response.getData().size() > 0) {
for (CattleResumeEntity pe : cattleResumeEntities) {
for (Long ids : response.getData()) {
if (pe.getUnid().equals(ids)) {
for (InspectEntity inspectEntity : response.getData()) {
Log.e("why", "why:pe.getUnid():"+pe.getUnid()+"-inspectEntity.getUnid():"+inspectEntity.getUnid());
if (pe.getUnid().toString().equals(inspectEntity.getUnid())) {
pe.setUploadStatus("1");
break;
}
......@@ -407,6 +412,8 @@ public class SyncVM extends BaseViewModel<Repository> {
}
}
}).updateAsyncBatch(CattleResumeEntity.class, cattleResumeEntities);
}else if(response.getCode() == 301){
inspectEvent.setValue((ArrayList<InspectEntity>)response.getData());
} else if (response.getCode() == 401) {
dismissDialog();
Bundle bundle = new Bundle();
......
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapter" />
<import type="me.goldze.mvvmhabit.binding.viewadapter.recyclerview.LayoutManagers" />
<import type="me.goldze.mvvmhabit.binding.viewadapter.recyclerview.LineManagers" />
<variable
name="viewModel"
type="com.phlx.anchorcollect_p.ui.labelchange.list.ExchangeListVM" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.product.activity.ProductInfoListActivity">
<include
android:id="@+id/include"
layout="@layout/layout_back_bar"
binding:backBarVM="@{viewModel.backBarVM}" />
<LinearLayout
android:id="@+id/RefreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
binding:layout_constraintBottom_toBottomOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/include">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginEnd="@dimen/dp_15"
binding:adapter="@{viewModel.adapter}"
binding:itemBinding="@{viewModel.itemBinding}"
binding:items="@{viewModel.observableList}"
binding:layoutManager="@{LayoutManagers.linear()}"
binding:lineManager="@{LineManagers.horizontal()}" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:binding="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewModel"
type="com.phlx.anchorcollect_p.ui.labelchange.list.ExchangeItem" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingRight="@dimen/dp_15"
android:paddingLeft="@dimen/dp_15"
android:paddingTop="@dimen/dp_10"
android:paddingBottom="@dimen/dp_10"
binding:onClickCommand="@{viewModel.onItemClick}"
>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_1_1_title"
style="@style/ItemTitleFontBlueStyle"
android:text="@string/registration_no"
binding:layout_constraintTop_toTopOf="parent"
binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintBottom_toTopOf="@+id/tv_2_1_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_1_1"
style="@style/ItemContentFontBlackStyle"
android:text="@{viewModel.entity.registrationNo}"
binding:layout_constraintTop_toTopOf="@+id/tv_1_1_title"
binding:layout_constraintLeft_toRightOf="@+id/tv_1_1_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_date"
style="@style/ItemContentFontBlackStyle"
android:visibility="gone"
android:text="@{viewModel.inspectString}"
binding:layout_constraintRight_toRightOf="parent"
binding:layout_constraintTop_toTopOf="@+id/tv_1_1_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_1_title"
style="@style/ItemTitleFontBlueStyle"
android:text="@string/individual_no"
android:layout_marginTop="@dimen/dp_10"
binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/tv_1_1_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_1"
style="@style/ItemContentFontBlackStyle"
android:text="@{viewModel.entity.individualNo}"
binding:layout_constraintTop_toTopOf="@+id/tv_2_1_title"
binding:layout_constraintLeft_toRightOf="@+id/tv_2_1_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_2_title"
style="@style/ItemTitleFontBlueStyle"
android:visibility="gone"
android:text="@string/unit"
android:layout_marginLeft="@dimen/dp_20"
binding:layout_constraintLeft_toRightOf="@+id/tv_2_1"
binding:layout_constraintTop_toTopOf="@+id/tv_2_1" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_2_2"
style="@style/ItemContentFontBlackStyle"
android:visibility="gone"
android:text="@{viewModel.entity.registrationNo}"
binding:layout_constraintLeft_toRightOf="@+id/tv_2_2_title"
binding:layout_constraintTop_toTopOf="@+id/tv_2_2_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_3_1_title"
style="@style/ItemTitleFontBlueStyle"
android:text="@string/registration_no"
android:layout_marginTop="@dimen/dp_10"
android:visibility="gone"
binding:layout_constraintStart_toStartOf="parent"
binding:layout_constraintTop_toBottomOf="@+id/tv_2_1_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_3_1"
style="@style/ItemContentFontBlackStyle"
android:visibility="gone"
android:text="@{viewModel.entity.registrationNo}"
binding:layout_constraintBaseline_toBaselineOf="@+id/tv_3_1_title"
binding:layout_constraintLeft_toRightOf="@+id/tv_3_1_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_3_2_title"
style="@style/ItemTitleFontBlueStyle"
android:text="@string/unit"
android:visibility="gone"
android:layout_marginLeft="@dimen/dp_20"
binding:layout_constraintLeft_toRightOf="@+id/tv_3_1"
binding:layout_constraintBaseline_toBaselineOf="@+id/tv_3_1_title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_3_2"
style="@style/ItemContentFontBlackStyle"
android:text="@{viewModel.entity.registrationNo}"
android:visibility="gone"
binding:layout_constraintLeft_toRightOf="@+id/tv_3_2_title"
binding:layout_constraintBaseline_toBaselineOf="@+id/tv_3_2_title"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_weight_type"
style="@style/ItemContentFontBlackStyle"
android:visibility="gone"
android:text=""
binding:layout_constraintBaseline_toBaselineOf="@+id/tv_2_1_title"
binding:layout_constraintRight_toRightOf="parent"
/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_execute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@{viewModel.inspectString}"
binding:layout_constraintTop_toBottomOf="@+id/tv_date"
binding:layout_constraintRight_toRightOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
\ No newline at end of file
......@@ -28,11 +28,15 @@
<string name="breeding_record">配种记录</string>
<string name="breeding_record_detail">配种详情</string>
<string name="label_change">标签换绑</string>
<string name="label_inspect">标签重复记录</string>
<string name="one_click_sync">一键同步</string>
<string name="error_data_upload">错误上报</string>
<string name="registration_no">电子耳标</string>
<string name="individual_no">可视耳标</string>
<string name="jobNum">工号:</string>
......
......@@ -87,4 +87,18 @@
<item name="android:windowCloseOnTouchOutside">false</item>
</style>
<style name="ItemTitleFontBlueStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">@color/statueBar_bg</item>
<item name="android:textSize">@dimen/sp_16</item>
</style>
<style name="ItemContentFontBlackStyle">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">@dimen/sp_14</item>
<item name="android:layout_marginLeft">@dimen/dp_5</item>
</style>
</resources>
......@@ -60,6 +60,12 @@ dependencies {
api (rootProject.ext.dependencies.glide){
exclude group: 'com.android.support'
}
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
annotationProcessor rootProject.ext.dependencies["glide-compiler"]
//recyclerview的databinding套装
api(rootProject.ext.dependencies.bindingcollectionadapter) {
......
package me.goldze.mvvmhabit;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import androidx.test.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
/**
* Instrumentation test, which will execute on an Android device.
*
......
package me.goldze.mvvmhabit;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
/**
* Example local unit test, which will execute on the development machine (host).
......
package com.lingber.mycontrol;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
/**
* Instrumentation test, which will execute on an Android device.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment