app/src/main/AndroidManifest.xml
@@ -168,7 +168,30 @@ <activity android:name=".ui.function.PrivacyDetailActivity" android:exported="false" /> <activity android:name=".ui.function.TourismActivity" android:exported="false" /> <activity android:name=".ui.function.TourismDetailActivity" android:exported="false" /> <activity android:name=".ui.function.TourismExperienceActivity" android:exported="false" /> <activity android:name=".ui.function.TourismExperienceDetailActivity" android:exported="false" /> <activity android:name=".ui.personal_center.BasicInfoActivity" android:exported="false" /> <activity android:name=".ui.function.ContactsActivity" android:exported="false" /> <activity android:name=".ui.function.PersonalNotepadActivity" android:exported="false" /> <activity android:name=".ui.function.PersonalNotepadDetailActivity" android:exported="false" /> </application> </manifest> app/src/main/java/com/application/zhangshi_app_android/adapter/ConsumeRecordRvAdapter.java
New file @@ -0,0 +1,34 @@ package com.application.zhangshi_app_android.adapter; import android.content.Context; import com.android.app_base.base.adapter.BaseRVAdapter; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.ConsumeRecordBean; import com.application.zhangshi_app_android.databinding.ItemConsumeRecordBinding; /** * @author Ljj * @date 2023.05.08. 19:49 * @desc 消费记录适配器 */ public class ConsumeRecordRvAdapter extends BaseRVAdapter<ConsumeRecordBean, ItemConsumeRecordBinding,BaseRVAdapter.BaseViewHolder<ItemConsumeRecordBinding>> { public ConsumeRecordRvAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_consume_record; } @Override protected void onBind(BaseViewHolder<ItemConsumeRecordBinding> holder, int position) { holder.getBinding().setBean(getItem(position)); } @Override protected BaseViewHolder<ItemConsumeRecordBinding> getViewHolder(ItemConsumeRecordBinding itemBind, int viewType) { return new BaseViewHolder<>(itemBind); } } app/src/main/java/com/application/zhangshi_app_android/adapter/ContactsDetailAdapter.java
New file @@ -0,0 +1,44 @@ package com.application.zhangshi_app_android.adapter; import android.content.Context; import android.view.View; import com.android.app_base.base.adapter.BaseRVAdapter; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.databinding.ItemContactsDetailBinding; import com.application.zhangshi_app_android.ui.dialog.ContactsDialog; /** * @author Ljj * @date 2023.05.12. 22:50 * @desc */ public class ContactsDetailAdapter extends BaseRVAdapter<ContactsDetailBean,ItemContactsDetailBinding,BaseRVAdapter.BaseViewHolder<ItemContactsDetailBinding>> { public ContactsDetailAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_contacts_detail; } @Override protected void onBind(BaseViewHolder<ItemContactsDetailBinding> holder, int position) { holder.getBinding().setBean(mDataList.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ContactsDialog.Builder builder = new ContactsDialog.Builder(mContext); builder.setBean(mDataList.get(position)); builder.show(); } }); } @Override protected BaseViewHolder<ItemContactsDetailBinding> getViewHolder(ItemContactsDetailBinding itemBind, int viewType) { return new BaseViewHolder<ItemContactsDetailBinding>(itemBind); } } app/src/main/java/com/application/zhangshi_app_android/adapter/ContactsRvAdapter.java
@@ -9,8 +9,8 @@ import com.android.app_base.base.adapter.BaseRVAdapter; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.databinding.ItemContactsBinding; import com.application.zhangshi_app_android.ui.function.ContactsActivityViewModel; /** * @author Gss @@ -19,12 +19,10 @@ */ public class ContactsRvAdapter extends BaseRVAdapter<ContactsBean, ItemContactsBinding, ContactsRvAdapter.ViewHolder> { private ContactsActivityViewModel viewModel; public ContactsRvAdapter(Context context) { super(context); } @Override protected int getLayoutId() { @@ -39,6 +37,9 @@ @Override protected void onBind(ViewHolder holder, int position) { holder.getBinding().setBean(mDataList.get(position)); ContactsDetailAdapter adapter = new ContactsDetailAdapter(mContext); holder.getBinding().recyclerView.setAdapter(adapter); adapter.setData(mDataList.get(position).getContactsDetailBeans()); if (position % 2 != 0){ holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_blue)); }else { @@ -71,7 +72,7 @@ holder.isExpended = false; }else{ final int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); holder.getBinding().cardView.measure(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); holder.getBinding().cardView.measure(View.MeasureSpec.UNSPECIFIED,View.MeasureSpec.UNSPECIFIED); int targetHeight = holder.getBinding().cardView.getMeasuredHeight(); int distanceToExpand = targetHeight - initialHeight; Animation a = new Animation() { app/src/main/java/com/application/zhangshi_app_android/adapter/DailyConsumeRecordRvAdapter.java
@@ -36,7 +36,22 @@ @Override protected void onBind(ViewHolder holder, int position) { holder.getBinding().setBean(getItem(position)); holder.getBinding().setIsFold(holder.isExpended); ConsumeRecordRvAdapter adapter = new ConsumeRecordRvAdapter(mContext); holder.getBinding().rvConsumeRecord.setAdapter(adapter); adapter.setData(getItem(position).getConsumeRecordBeans()); holder.getBinding().ivFold.setOnClickListener(v -> { if (holder.isExpended) { holder.isExpended = false; holder.getBinding().setIsFold(false); collapseView(holder.getBinding().rvConsumeRecord, holder.getBinding().rvConsumeRecord); } else { holder.isExpended = true; holder.getBinding().setIsFold(true); expandView(holder.getBinding().rvConsumeRecord); } }); } @Override @@ -75,7 +90,7 @@ a.setDuration(500); initialView.startAnimation(a); } public void expendView(View initialView){ public void expandView(View initialView){ int initialHeight = initialView.getMeasuredHeight(); initialView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); int targetHeight = initialView.getMeasuredHeight(); app/src/main/java/com/application/zhangshi_app_android/adapter/PersonalNotepadRvAdapter.java
New file @@ -0,0 +1,132 @@ package com.application.zhangshi_app_android.adapter; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; import android.widget.FrameLayout; import androidx.recyclerview.widget.GridLayoutManager; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.manager.AppManager; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.PersonalNotepadBean; import com.application.zhangshi_app_android.databinding.ItemPersonalNotepadBinding; import com.application.zhangshi_app_android.ui.function.PersonalNotepadDetailActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Ljj * @date 2023.05.14. 19:44 * @desc */ public class PersonalNotepadRvAdapter extends BaseRVAdapter<PersonalNotepadBean, ItemPersonalNotepadBinding, PersonalNotepadRvAdapter.ViewHolder> { public PersonalNotepadRvAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_personal_notepad; } @Override protected ViewHolder getViewHolder(ItemPersonalNotepadBinding itemBind, int viewType) { return new ViewHolder(itemBind); } @Override protected void onBind(ViewHolder holder, int position) { holder.getBinding().setBean(mDataList.get(position)); if (position % 2 != 0){ holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_blue)); }else { holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_pink)); } holder.getBinding().layoutTitle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (holder.isExpended){ int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); int collapsedHeight = holder.getBinding().layoutTitle.getMeasuredHeight(); int distanceToCollapse = (int) (initialHeight - collapsedHeight); Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1){ } holder.getBinding().cardView.getLayoutParams().height = (int) (initialHeight - (distanceToCollapse * interpolatedTime)); holder.getBinding().cardView.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }; a.setDuration(500); holder.getBinding().cardView.startAnimation(a); holder.isExpended = false; }else{ final int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); holder.getBinding().cardView.measure(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); int targetHeight = holder.getBinding().cardView.getMeasuredHeight(); int distanceToExpand = targetHeight - initialHeight; Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1){ } holder.getBinding().cardView.getLayoutParams().height = (int) (initialHeight + (distanceToExpand * interpolatedTime)); holder.getBinding().cardView.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }; a.setDuration(500); holder.getBinding().cardView.startAnimation(a); holder.isExpended = true; } } }); holder.getBinding().layoutContent.setOnClickListener(v -> { AppManager.getAppManager().startActivity( new Intent(getRecyclerView().getContext(), PersonalNotepadDetailActivity.class) .putExtra("bean",mDataList.get(position))); }); ImageRvAdapter adapter = new ImageRvAdapter(mContext); holder.getBinding().rvImage.setLayoutManager(new GridLayoutManager(mContext,3)); holder.getBinding().rvImage.setAdapter(adapter); String url = mDataList.get(position).getUrl(); if (url == null||url.isEmpty()){ return; } List<String> list; if (url.contains(",")){ String[] split = url.split(","); list = new ArrayList<>(Arrays.asList(split)); }else { list = new ArrayList<>(); list.add(url); } adapter.setData(list); } public static class ViewHolder extends BaseRVAdapter.BaseViewHolder<ItemPersonalNotepadBinding> { private boolean isExpended; public ViewHolder(ItemPersonalNotepadBinding binding) { super(binding); } } } app/src/main/java/com/application/zhangshi_app_android/adapter/TourismExperienceRvAdapter.java
New file @@ -0,0 +1,134 @@ package com.application.zhangshi_app_android.adapter; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.animation.Animation; import android.view.animation.Transformation; import android.widget.FrameLayout; import androidx.recyclerview.widget.GridLayoutManager; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.manager.AppManager; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.TourismExperienceBean; import com.application.zhangshi_app_android.databinding.ItemPropertyBinding; import com.application.zhangshi_app_android.databinding.ItemTourismExperienceBinding; import com.application.zhangshi_app_android.ui.function.PropertyDetailActivity; import com.application.zhangshi_app_android.ui.function.TourismExperienceDetailActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Ljj * @date 2023.05.08. 20:34 * @desc */ public class TourismExperienceRvAdapter extends BaseRVAdapter<TourismExperienceBean, ItemTourismExperienceBinding, TourismExperienceRvAdapter.ViewHolder> { public TourismExperienceRvAdapter(Context context) { super(context); } @Override protected int getLayoutId() { return R.layout.item_tourism_experience; } @Override protected ViewHolder getViewHolder(ItemTourismExperienceBinding itemBind, int viewType) { return new ViewHolder(itemBind); } @Override protected void onBind(ViewHolder holder, int position) { holder.getBinding().setBean(mDataList.get(position)); if (position % 2 != 0) { holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_blue)); } else { holder.getBinding().cardView.setCardBackgroundColor(mContext.getColor(R.color.color_card_pink)); } holder.getBinding().layoutTitle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (holder.isExpended) { int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); int collapsedHeight = holder.getBinding().layoutTitle.getMeasuredHeight(); int distanceToCollapse = (int) (initialHeight - collapsedHeight); Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1) { } holder.getBinding().cardView.getLayoutParams().height = (int) (initialHeight - (distanceToCollapse * interpolatedTime)); holder.getBinding().cardView.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }; a.setDuration(500); holder.getBinding().cardView.startAnimation(a); holder.isExpended = false; } else { final int initialHeight = holder.getBinding().cardView.getMeasuredHeight(); holder.getBinding().cardView.measure(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); int targetHeight = holder.getBinding().cardView.getMeasuredHeight(); int distanceToExpand = targetHeight - initialHeight; Animation a = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1) { } holder.getBinding().cardView.getLayoutParams().height = (int) (initialHeight + (distanceToExpand * interpolatedTime)); holder.getBinding().cardView.requestLayout(); } @Override public boolean willChangeBounds() { return true; } }; a.setDuration(500); holder.getBinding().cardView.startAnimation(a); holder.isExpended = true; } } }); holder.getBinding().layoutContent.setOnClickListener(v -> { AppManager.getAppManager().startActivity( new Intent(getRecyclerView().getContext(), TourismExperienceDetailActivity.class) .putExtra("bean", mDataList.get(position))); }); ImageRvAdapter adapter = new ImageRvAdapter(mContext); holder.getBinding().rvImage.setLayoutManager(new GridLayoutManager(mContext, 3)); holder.getBinding().rvImage.setAdapter(adapter); String url = mDataList.get(position).getUrl(); if (url == null || url.isEmpty()) { return; } List<String> list; if (url.contains(",")) { String[] split = url.split(","); list = new ArrayList<>(Arrays.asList(split)); } else { list = new ArrayList<>(); list.add(url); } adapter.setData(list); } public static class ViewHolder extends BaseRVAdapter.BaseViewHolder<ItemTourismExperienceBinding> { private boolean isExpended; public ViewHolder(ItemTourismExperienceBinding binding) { super(binding); } } } app/src/main/java/com/application/zhangshi_app_android/adapter/TourismRvAdapter.java
@@ -7,20 +7,16 @@ import android.view.animation.Transformation; import android.widget.FrameLayout; import androidx.recyclerview.widget.GridLayoutManager; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.manager.AppManager; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.TourismBean; import com.application.zhangshi_app_android.databinding.ItemTourismBinding; import com.application.zhangshi_app_android.ui.function.TourismActivity; import com.application.zhangshi_app_android.ui.function.TourismDetailActivity; import com.application.zhangshi_app_android.ui.function.TourismExperienceDetailActivity; import com.application.zhangshi_app_android.ui.function.TourismExperienceActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Ljj @@ -110,7 +106,7 @@ @Override public void onClick(View v) { AppManager.getAppManager().startActivity( new Intent(getRecyclerView().getContext(), TourismExperienceDetailActivity.class) new Intent(getRecyclerView().getContext(), TourismExperienceActivity.class) .putExtra("bean",mDataList.get(position))); } }); app/src/main/java/com/application/zhangshi_app_android/bean/ContactsBean.java
@@ -1,19 +1,31 @@ package com.application.zhangshi_app_android.bean; import java.io.Serializable; import java.util.List; public class ContactsBean implements Serializable { private long id; public long getId() { return id; /** * @author Ljj * @date 2023.05.12. 22:43 * @desc 通讯录 bean */ public class ContactsBean { //属于谁的通讯录 private String myName; private List<ContactsDetailBean> contactsDetailBeans; public String getMyName() { return myName; } public void setId(long id) { this.id = id; public void setMyName(String myName) { this.myName = myName; } public List<ContactsBean> getData() { return null; public List<ContactsDetailBean> getContactsDetailBeans() { return contactsDetailBeans; } public void setContactsDetailBeans(List<ContactsDetailBean> contactsDetailBeans) { this.contactsDetailBeans = contactsDetailBeans; } } app/src/main/java/com/application/zhangshi_app_android/bean/ContactsDetailBean.java
New file @@ -0,0 +1,129 @@ package com.application.zhangshi_app_android.bean; import java.io.Serializable; /** * 通讯录详情 bean */ public class ContactsDetailBean implements Serializable { //id private int id; //成员姓名 private String myName; //称呼 private String nickName; //称呼者姓名 private String name; //工作单位 private String work; //手机号码 private String phone; //微信 private String wx; private String qq; //推特 private String twitter; //是否常联系 0 否 1 是 private int is_always; //备注 private String remark; //电子文件 private String url; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getMyName() { return myName; } public void setMyName(String myName) { this.myName = myName; } public String getNickName() { return nickName; } public void setNickName(String nickName) { this.nickName = nickName; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWork() { return work; } public void setWork(String work) { this.work = work; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getWx() { return wx; } public void setWx(String wx) { this.wx = wx; } public String getQq() { return qq; } public void setQq(String qq) { this.qq = qq; } public String getTwitter() { return twitter; } public void setTwitter(String twitter) { this.twitter = twitter; } public int getIs_always() { return is_always; } public void setIs_always(int is_always) { this.is_always = is_always; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } app/src/main/java/com/application/zhangshi_app_android/bean/ContactsRequestBean.java
New file @@ -0,0 +1,78 @@ package com.application.zhangshi_app_android.bean; import java.util.HashMap; import java.util.Map; /** * @author Ljj * @date 2023.05.13. 0:29 * @desc */ public class ContactsRequestBean { //成员姓名 private String myName; //称呼 private String nickName; //称呼者姓名 private String name; //工作单位 private String work; //手机号码 private String phone; //微信 private String wx; private String qq; //推特 private String twitter; //是否常联系 0 否 1 是 private int is_always; //备注 private String remark; private int pageNum = 1; private int pageSize = 20; public Map<String, Object> toMap() { Map<String, Object> map = new HashMap<>(); if (myName == null) { myName = ""; } if (nickName == null) { nickName = ""; } if (name == null) { name = ""; } if (work == null) { work = ""; } if (phone == null) { phone = ""; } if (wx == null) { wx = ""; } if (qq == null) { qq = ""; } if (twitter == null) { twitter = ""; } if (remark == null) { remark = ""; } map.put("myName", myName); map.put("nickName", nickName); map.put("name", name); map.put("work", work); map.put("phone", phone); map.put("wx", wx); map.put("qq", qq); map.put("twitter", twitter); map.put("is_always", is_always); map.put("remark", remark); map.put("pageNum", pageNum); map.put("pageSize", pageSize); return map; } } app/src/main/java/com/application/zhangshi_app_android/bean/ContactsResponseBean.java
New file @@ -0,0 +1,32 @@ package com.application.zhangshi_app_android.bean; import java.util.List; /** * @author Ljj * @date 2023.05.13. 0:30 * @desc */ public class ContactsResponseBean { private List<ContactsDetailBean> data; private long pageNum; private long pageSize; private long total; public List<ContactsDetailBean> getData() { return data; } public void setData(List<ContactsDetailBean> data) { this.data = data; } public long getPageNum() { return pageNum; } public void setPageNum(long value) { this.pageNum = value; } public long getPageSize() { return pageSize; } public void setPageSize(long value) { this.pageSize = value; } public long getTotal() { return total; } public void setTotal(long value) { this.total = value; } } app/src/main/java/com/application/zhangshi_app_android/bean/PersonalNotepadBean.java
New file @@ -0,0 +1,81 @@ package com.application.zhangshi_app_android.bean; import java.io.Serializable; /** * @author Ljj * @date 2023.05.14. 19:33 * @desc */ public class PersonalNotepadBean implements Serializable { //id private int id; //标题 private String title; //时间 private String time; //人物 private String person; //地点 private String place; //备注 private String remark; //电子文件 private String url; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getPerson() { return person; } public void setPerson(String person) { this.person = person; } public String getPlace() { return place; } public void setPlace(String place) { this.place = place; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } app/src/main/java/com/application/zhangshi_app_android/bean/TourismExperienceBean.java
New file @@ -0,0 +1,111 @@ package com.application.zhangshi_app_android.bean; import java.io.Serializable; /** * @author Ljj * @date 2023.05.08. 20:33 * @desc 旅游经历 Bean */ public class TourismExperienceBean implements Serializable{ //标题 private String title; //时间 private String time; //地点 private String address; //人物 private String person; //旅期 private String travelTime; //持证旅游 private String certificate; //费用 private String cost; //公费/自费 private int free; //备注 private String remark; //电子文件 private String url; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getTime() { return time; } public void setTime(String time) { this.time = time; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPerson() { return person; } public void setPerson(String person) { this.person = person; } public String getTravelTime() { return travelTime; } public void setTravelTime(String travelTime) { this.travelTime = travelTime; } public String getCertificate() { return certificate; } public void setCertificate(String certificate) { this.certificate = certificate; } public String getCost() { return cost; } public void setCost(String cost) { this.cost = cost; } public int getFree() { return free; } public void setFree(int free) { this.free = free; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } app/src/main/java/com/application/zhangshi_app_android/data/DataRepository.java
@@ -5,7 +5,8 @@ import com.android.app_base.base.model.BaseModel; import com.android.app_base.http.ResultData; import com.application.zhangshi_app_android.bean.CaptchaImageBean; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.bean.ContactsResponseBean; import com.application.zhangshi_app_android.bean.FamilyAssetsResponseBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaResponseBean; @@ -183,13 +184,11 @@ return mHttpDataSource.getGrowthExperienceAutobiography(); } /** * 获取通讯录 */ public Observable<ResultData<ContactsBean>> getFamilyContacts(Map<String, Object> paramsMap) { return mHttpDataSource.getFamilyContacts(paramsMap); public Observable<ResultData<ContactsResponseBean>> getContacts(Map<String, Object> paramsMap) { return mHttpDataSource.getContacts(paramsMap); } /** app/src/main/java/com/application/zhangshi_app_android/data/source/HttpDataSource.java
@@ -2,8 +2,9 @@ import com.android.app_base.http.ResultData; import com.application.zhangshi_app_android.bean.CaptchaImageBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.bean.ContactsResponseBean; import com.application.zhangshi_app_android.bean.FamilyAssetsResponseBean; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaResponseBean; import com.application.zhangshi_app_android.bean.GrowthExperienceAbroadConditionBean; @@ -122,7 +123,7 @@ /** * 获取通讯录 */ Observable<ResultData<ContactsBean>> getFamilyContacts(Map<String, Object> paramsMap); Observable<ResultData<ContactsResponseBean>> getContacts(Map<String, Object> paramsMap); } app/src/main/java/com/application/zhangshi_app_android/data/source/http/ApiService.java
@@ -2,8 +2,9 @@ import com.android.app_base.http.ResultData; import com.application.zhangshi_app_android.bean.CaptchaImageBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.bean.ContactsResponseBean; import com.application.zhangshi_app_android.bean.FamilyAssetsResponseBean; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaResponseBean; import com.application.zhangshi_app_android.bean.GrowthExperienceAbroadConditionBean; @@ -156,6 +157,6 @@ /** * 获取通讯录 */ @GET("/zAutobiography/all") Observable<ResultData<ContactsBean>> getFamilyContacts(Map<String, Object> paramsMap); @GET("/zfContact/all") Observable<ResultData<ContactsResponseBean>> getContacts(@QueryMap Map<String, Object> paramsMap); } app/src/main/java/com/application/zhangshi_app_android/data/source/http/HttpDataSourceImpl.java
@@ -3,7 +3,8 @@ import com.android.app_base.http.ResultData; import com.android.app_base.http.RetrofitManager; import com.application.zhangshi_app_android.bean.CaptchaImageBean; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.bean.ContactsResponseBean; import com.application.zhangshi_app_android.bean.FamilyAssetsResponseBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean; import com.application.zhangshi_app_android.bean.FamilyMemorabiliaResponseBean; @@ -28,6 +29,7 @@ import io.reactivex.Observable; import okhttp3.MultipartBody; import retrofit2.http.QueryMap; /** * @author Ljj @@ -207,8 +209,8 @@ } @Override public Observable<ResultData<ContactsBean>> getFamilyContacts(Map<String, Object> paramsMap) { return apiService.getFamilyContacts(paramsMap); public Observable<ResultData<ContactsResponseBean>> getContacts(Map<String, Object> paramsMap) { return apiService.getContacts(paramsMap); } } app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseActivity.java
@@ -96,7 +96,7 @@ classMap.put(HonorCollectionActivity.class,(LinearLayout) findViewById(R.id.dl_honor_collection)); classMap.put(LittleDoctorActivity.class,(LinearLayout) findViewById(R.id.dl_little_doctor)); classMap.put(CleanStorageActivity.class,(LinearLayout) findViewById(R.id.dl_clean_storage)); classMap.put(null,(LinearLayout) findViewById(R.id.dl_contacts)); classMap.put(ContactsActivity.class,(LinearLayout) findViewById(R.id.dl_contacts)); classMap.put(PetActivity.class,(LinearLayout) findViewById(R.id.dl_pet)); classMap.put(IncomeAndExpensesActivity.class,(LinearLayout) findViewById(R.id.dl_income_and_expenses)); classMap.put(GrowthExperienceActivity.class,(LinearLayout) findViewById(R.id.dl_growing_up)); @@ -106,7 +106,7 @@ classMap.put(HealthCareActivity.class,(LinearLayout) findViewById(R.id.dl_health_care)); classMap.put(CertificateOfHonorActivity.class,(LinearLayout) findViewById(R.id.dl_certificate_of_honor)); classMap.put(PrivacyActivity.class,(LinearLayout) findViewById(R.id.dl_privacy)); classMap.put(null,(LinearLayout) findViewById(R.id.dl_tourism)); classMap.put(TourismActivity.class,(LinearLayout) findViewById(R.id.dl_tourism)); setSelectItem(classMap.get(getClass())); for (Map.Entry<Class, LinearLayout> set : classMap.entrySet()) { app/src/main/java/com/application/zhangshi_app_android/ui/DLBaseFragment.java
New file @@ -0,0 +1,173 @@ package com.application.zhangshi_app_android.ui; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; import androidx.drawerlayout.widget.DrawerLayout; import com.android.app_base.base.view.BaseActivity; import com.android.app_base.base.view.BaseFragment; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.manager.AppManager; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.ui.function.CertificateOfHonorActivity; import com.application.zhangshi_app_android.ui.function.CleanStorageActivity; import com.application.zhangshi_app_android.ui.function.ContactsActivity; import com.application.zhangshi_app_android.ui.function.FamilyAssetsActivity; import com.application.zhangshi_app_android.ui.function.FamilyMemorabiliaActivity; import com.application.zhangshi_app_android.ui.function.GrowthExperienceActivity; import com.application.zhangshi_app_android.ui.function.HealthCareActivity; import com.application.zhangshi_app_android.ui.function.HomeDevicesActivity; import com.application.zhangshi_app_android.ui.function.HonorCollectionActivity; import com.application.zhangshi_app_android.ui.function.HundredWishActivity; import com.application.zhangshi_app_android.ui.function.IncomeAndExpensesActivity; import com.application.zhangshi_app_android.ui.function.LittleDoctorActivity; import com.application.zhangshi_app_android.ui.function.MarriageActivity; import com.application.zhangshi_app_android.ui.function.PetActivity; import com.application.zhangshi_app_android.ui.function.PrivacyActivity; import com.application.zhangshi_app_android.ui.function.PropertyActivity; import com.application.zhangshi_app_android.ui.function.TourismActivity; import com.hjq.bar.TitleBar; import java.util.HashMap; import java.util.Map; /** * @author Ljj * @date 2023.05.08. 21:49 * @desc 该APP里统一侧拉栏的 Fragment 基类 */ public abstract class DLBaseFragment<VDB extends ViewDataBinding,VM extends BaseViewModel> extends BaseFragment<VDB,VM> { /** * 侧拉栏 */ private DrawerLayout mDrawerLayout; private Map<Class, LinearLayout> classMap = new HashMap<>(); @Override protected VDB initViewBinding(LayoutInflater inflater, @Nullable ViewGroup container) { if (isDrawerLayoutEnabled()){ mDrawerLayout = new DrawerLayout(getSelfActivity()); mDrawerLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); VDB mBinding = DataBindingUtil.inflate(inflater, getLayoutId(), mDrawerLayout, true); if (getDrawerLayoutId() > 0){ getLayoutInflater().inflate(getDrawerLayoutId(), mDrawerLayout, true); }else { throw new IllegalArgumentException("没给侧拉栏布局就不要开启侧拉栏啦"); } return mBinding; } return super.initViewBinding(inflater, container); } /** * 是否开启侧拉栏 */ protected boolean isDrawerLayoutEnabled() { return true; } /** * 获取侧拉栏的id * @return layout的id */ protected int getDrawerLayoutId(){ return R.layout.layout_drawer; }; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (mDrawerLayout != null) { classMap.put(null,(LinearLayout) findViewById(R.id.dl_home_root_net)); classMap.put(FamilyMemorabiliaActivity.class,(LinearLayout) findViewById(R.id.dl_family_memorabilia)); classMap.put(FamilyAssetsActivity.class,(LinearLayout) findViewById(R.id.dl_family_assets)); classMap.put(HomeDevicesActivity.class,(LinearLayout) findViewById(R.id.dl_home_devices)); classMap.put(HonorCollectionActivity.class,(LinearLayout) findViewById(R.id.dl_honor_collection)); classMap.put(LittleDoctorActivity.class,(LinearLayout) findViewById(R.id.dl_little_doctor)); classMap.put(CleanStorageActivity.class,(LinearLayout) findViewById(R.id.dl_clean_storage)); classMap.put(ContactsActivity.class,(LinearLayout) findViewById(R.id.dl_contacts)); classMap.put(PetActivity.class,(LinearLayout) findViewById(R.id.dl_pet)); classMap.put(IncomeAndExpensesActivity.class,(LinearLayout) findViewById(R.id.dl_income_and_expenses)); classMap.put(GrowthExperienceActivity.class,(LinearLayout) findViewById(R.id.dl_growing_up)); classMap.put(MarriageActivity.class,(LinearLayout) findViewById(R.id.dl_marriage)); classMap.put(PropertyActivity.class,(LinearLayout) findViewById(R.id.dl_property)); classMap.put(HundredWishActivity.class,(LinearLayout) findViewById(R.id.dl_hundred_wish)); classMap.put(HealthCareActivity.class,(LinearLayout) findViewById(R.id.dl_health_care)); classMap.put(CertificateOfHonorActivity.class,(LinearLayout) findViewById(R.id.dl_certificate_of_honor)); classMap.put(PrivacyActivity.class,(LinearLayout) findViewById(R.id.dl_privacy)); classMap.put(TourismActivity.class,(LinearLayout) findViewById(R.id.dl_tourism)); setSelectItem(classMap.get(getClass())); for (Map.Entry<Class, LinearLayout> set : classMap.entrySet()) { LinearLayout linearLayout = set.getValue(); if (linearLayout != null) { linearLayout.setOnClickListener(v -> { if (set.getKey() != null){ AppManager.getAppManager().startActivity(set.getKey()); } }); } else { } } mDrawerLayout.setScrimColor(getResources().getColor(R.color.color_shadow)); } } private void setSelectItem(LinearLayout linearLayout) { if (linearLayout == null){ return; } TextView textView = (TextView) linearLayout.getChildAt(1); ImageView imageView = (ImageView) linearLayout.getChildAt(2); textView.setTextColor(Color.parseColor("#FFF6739F")); imageView.setBackgroundResource(R.drawable.ic_vector_pink); } /** * 获取DrawerLayout */ @Nullable public DrawerLayout getDrawerLayout() { return mDrawerLayout; } @Override public void onLeftClick(TitleBar titleBar) { super.onLeftClick(titleBar); mDrawerLayout.open(); } public PopupWindow initPopUpWindow(View view){ PopupWindow popupWindow = new PopupWindow(getSelfActivity()); // 设置布局文件 popupWindow.setContentView(view); // 为了避免部分机型不显示,需要重新设置一下宽高 popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); // 设置pop透明效果 popupWindow.setBackgroundDrawable(new ColorDrawable(0x0000)); // 设置pop出入动画 popupWindow.setAnimationStyle(com.android.app_base.R.style.pop_operate); // 设置pop获取焦点,如果为false点击返回按钮会退出当前Activity,如果pop中有Editor的话,focusable必须要为true popupWindow.setFocusable(true); // 设置pop可点击,为false点击事件无效,默认为true popupWindow.setTouchable(true); // 设置点击pop外侧消失,默认为false;在focusable为true时点击外侧始终消失 popupWindow.setOutsideTouchable(false); return popupWindow; } } app/src/main/java/com/application/zhangshi_app_android/ui/dialog/ContactsDialog.java
New file @@ -0,0 +1,53 @@ package com.application.zhangshi_app_android.ui.dialog; import android.content.Context; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import androidx.databinding.DataBindingUtil; import com.android.app_base.base.dialog.BaseDialog; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.databinding.DialogContactsInfoBinding; /** * @author Ljj * @date 2023.05.13. 20:50 * @desc */ public class ContactsDialog { public static class Builder extends BaseDialog.Builder<ContactsDialog.Builder> { private DialogContactsInfoBinding binding; public Builder(Context context) { super(context); binding = DataBindingUtil.inflate(LayoutInflater.from(getContext()),R.layout.dialog_contacts_info,new FrameLayout(getContext()),false); setContentView(binding.getRoot()); setAnimStyle(BaseDialog.ANIM_IOS); setBackgroundDimEnabled(false); setCancelable(false); setGravity(Gravity.CENTER); ImageView iv_dialog_close = findViewById(R.id.iv_dialog_close); setOnClickListener(iv_dialog_close); } @Override public void onClick(View v) { super.onClick(v); if (v.getId() == R.id.iv_dialog_close){ if (getDialog() != null) { getDialog().dismiss(); } } } public Builder setBean(ContactsDetailBean bean){ binding.setBean(bean); return this; } } } app/src/main/java/com/application/zhangshi_app_android/ui/dialog/PetOwnerInfoDialog.java
@@ -18,7 +18,7 @@ * @desc */ public class PetOwnerInfoDialog { public static class Builder extends BaseDialog.Builder<BigImageDialog.Builder> { public static class Builder extends BaseDialog.Builder<PetOwnerInfoDialog.Builder> { public Builder(Context context) { super(context); setContentView(R.layout.dialog_pet_owner_info); app/src/main/java/com/application/zhangshi_app_android/ui/function/ContactsActivity.java
@@ -5,15 +5,23 @@ import android.widget.PopupWindow; import androidx.databinding.library.baseAdapters.BR; import androidx.lifecycle.Observer; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.ContactsRvAdapter; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.databinding.ActivityContactsBinding; ; import com.application.zhangshi_app_android.ui.DLBaseActivity; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * @author Gss @@ -48,9 +56,7 @@ binding.recyclerView.addItemDecoration(itemDecoration); binding.recyclerView.setAdapter(adapter); mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate,null)); mOperatePopupWindow.getContentView().findViewById(R.id.layout_add).setVisibility(View.GONE); mOperatePopupWindow.getContentView().findViewById(R.id.layout_select).setVisibility(View.GONE); mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_contacts_import,null)); binding.ivOperate.setOnClickListener(v -> { mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); @@ -59,33 +65,39 @@ @Override public void initData() { // viewModel.getFamilyContacts(); viewModel.getContacts(); } @Override public void initLiveDataObserve() { // viewModel.getDataListLiveData().observe(this, familyContactsBeans -> { // adapter.setData(familyContactsBeans); // }); viewModel.getDataListLiveData().observe(this, contactsDetailBeans -> { //根据名字分组 Set<String> maNames = new HashSet<>(); for (ContactsDetailBean bean : contactsDetailBeans) { maNames.add(bean.getMyName()); } List<ContactsBean> list = new ArrayList<>(); for (String name : maNames) { ContactsBean bean = new ContactsBean(); bean.setMyName(name); List<ContactsDetailBean> detailBeans = new ArrayList<>(); for (ContactsDetailBean detailBean : contactsDetailBeans) { if (name.equals(detailBean.getMyName())) { detailBeans.add(detailBean); } } bean.setContactsDetailBeans(detailBeans); list.add(bean); } adapter.setData(list); }); } public PopupWindow initPopUpWindow(View view){ PopupWindow popupWindow = new PopupWindow(this); // 设置布局文件 popupWindow.setContentView(view); // 为了避免部分机型不显示,需要重新设置一下宽高 popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); // 设置pop透明效果 popupWindow.setBackgroundDrawable(new ColorDrawable(0x0000)); // 设置pop出入动画 popupWindow.setAnimationStyle(com.android.app_base.R.style.pop_operate); // 设置pop获取焦点,如果为false点击返回按钮会退出当前Activity,如果pop中有Editor的话,focusable必须要为true popupWindow.setFocusable(true); // 设置pop可点击,为false点击事件无效,默认为true popupWindow.setTouchable(true); // 设置点击pop外侧消失,默认为false;在focusable为true时点击外侧始终消失 popupWindow.setOutsideTouchable(false); return popupWindow; @Override public void onClick(View v) { super.onClick(v); if (v.getId() == R.id.layout_contacts_import){ mOperatePopupWindow.dismiss(); } } } app/src/main/java/com/application/zhangshi_app_android/ui/function/ContactsActivityViewModel.java
@@ -1,4 +1,5 @@ package com.application.zhangshi_app_android.ui.function; import static com.android.app_base.base.BaseConfig.CODE_SUCCESS; import android.app.Application; @@ -8,11 +9,13 @@ import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.http.ResultData; import com.android.app_base.utils.RxUtils; import com.application.zhangshi_app_android.bean.ContactsDetailBean; import com.application.zhangshi_app_android.bean.ContactsBean; import com.application.zhangshi_app_android.bean.ContactsRequestBean; import com.application.zhangshi_app_android.bean.ContactsResponseBean; import com.application.zhangshi_app_android.data.DataRepository; import java.util.HashMap; @@ -20,6 +23,7 @@ import io.reactivex.Observer; import io.reactivex.disposables.Disposable; /** * @author Gss * @date 2023.04.18. 19:54 @@ -27,7 +31,8 @@ */ public class ContactsActivityViewModel extends BaseViewModel<DataRepository> { private MutableLiveData<List<ContactsBean>> dataListLiveData;//所有数据 private MutableLiveData<ContactsRequestBean> requestBeanLiveData;//请求参数 private MutableLiveData<List<ContactsDetailBean>> dataListLiveData;//所有数据 public ContactsActivityViewModel(@NonNull Application application) { @@ -41,51 +46,66 @@ public void getContacts(){ // model.getFamilyContacts(new HashMap<>()) // .compose(RxUtils.schedulersTransformer()) // .subscribe(new Observer<ResultData<ContactsBean>>() { // @Override // public void onSubscribe(Disposable d) { // addSubscribe(d); // } // // @Override // public void onNext(ResultData<ContactsBean> data) { // if (data.getCode() == CODE_SUCCESS){ // if (data.getData().getData().isEmpty()){ // changeStateView(StateViewEnum.DATA_NULL); // }else { // changeStateView(StateViewEnum.HIDE); // dataListLiveData.postValue(data.getData().getData()); // } // }else { // messageLiveData.postValue(data.getMsg()); // } // } // // @Override // public void onError(Throwable e) { // messageLiveData.postValue(e.getMessage()); // } // // @Override // public void onComplete() { // // } // }); if (getRequestBeanLiveData().getValue() == null){ getRequestBeanLiveData().setValue(new ContactsRequestBean()); } model.getContacts(getRequestBeanLiveData().getValue().toMap()) .compose(RxUtils.schedulersTransformer()) .subscribe(new Observer<ResultData<ContactsResponseBean>>() { @Override public void onSubscribe(Disposable d) { addSubscribe(d); } @Override public void onNext(ResultData<ContactsResponseBean> data) { if (data.getCode() == CODE_SUCCESS){ if (data.getData().getData().isEmpty()){ changeStateView(StateViewEnum.DATA_NULL); }else { changeStateView(StateViewEnum.HIDE); dataListLiveData.postValue(data.getData().getData()); } }else { messageLiveData.postValue(data.getMsg()); } } @Override public void onError(Throwable e) { messageLiveData.postValue(e.getMessage()); } @Override public void onComplete() { } }); } public MutableLiveData<List<ContactsBean>> getDataListLiveData() { public MutableLiveData<List<ContactsDetailBean>> getDataListLiveData() { if (dataListLiveData == null){ dataListLiveData = new MutableLiveData<>(); } return dataListLiveData; } public void setDataListLiveData(MutableLiveData<List<ContactsBean>> dataListLiveData) { public void setDataListLiveData(MutableLiveData<List<ContactsDetailBean>> dataListLiveData) { this.dataListLiveData = dataListLiveData; } public MutableLiveData<ContactsRequestBean> getRequestBeanLiveData() { if (requestBeanLiveData == null){ requestBeanLiveData = new MutableLiveData<>(); requestBeanLiveData.setValue(new ContactsRequestBean()); } return requestBeanLiveData; } public void setRequestBeanLiveData(MutableLiveData<ContactsRequestBean> requestBeanLiveData) { this.requestBeanLiveData = requestBeanLiveData; } } app/src/main/java/com/application/zhangshi_app_android/ui/function/FunctionFragment.java
@@ -8,13 +8,14 @@ import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.databinding.FragmentFunctionBinding; import com.application.zhangshi_app_android.ui.DLBaseFragment; /** * @author Ljj * @date 2023.03.15. 20:14 * @desc 功能 Fragment */ public class FunctionFragment extends BaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> { public class FunctionFragment extends DLBaseFragment<FragmentFunctionBinding,FunctionFragmentViewModel> { public FunctionFragment() { } @@ -59,17 +60,11 @@ AppManager.getAppManager().startActivity(FamilyAssetsActivity.class); } }); binding.layoutHomeDevices.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AppManager.getAppManager().startActivity(HomeDevicesActivity.class); } binding.layoutHomeDevices.setOnClickListener(view -> { AppManager.getAppManager().startActivity(HomeDevicesActivity.class); }); binding.layoutGrowingUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AppManager.getAppManager().startActivity(GrowthExperienceActivity.class); } binding.layoutGrowingUp.setOnClickListener(view -> { AppManager.getAppManager().startActivity(GrowthExperienceActivity.class); }); binding.layoutHonorCollection.setOnClickListener(v->{ AppManager.getAppManager().startActivity(HonorCollectionActivity.class); @@ -104,6 +99,12 @@ binding.layoutPrivacy.setOnClickListener(v->{ AppManager.getAppManager().startActivity(PrivacyActivity.class); }); binding.layoutTourism.setOnClickListener(v->{ AppManager.getAppManager().startActivity(TourismActivity.class); }); binding.layoutContacts.setOnClickListener(v->{ AppManager.getAppManager().startActivity(ContactsActivity.class); }); } @Override app/src/main/java/com/application/zhangshi_app_android/ui/function/GrowthExperienceActivity.java
@@ -9,11 +9,14 @@ import android.view.animation.Transformation; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.PopupWindow; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.lifecycle.Observer; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.ScreenSizeUtils; import com.android.app_base.utils.ToastUtils; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; @@ -42,6 +45,9 @@ private GrowthExperienceRelationshipRvAdapter relationshipRvAdapter; private GrowthExperienceHolderConditionRvAdapter holderConditionRvAdapter; private GrowthExperienceAbroadConditionRvAdapter abroadConditionRvAdapter; private PopupWindow mOperatePopupWindow; @Override public int getLayoutId() { @@ -81,6 +87,18 @@ binding.rvAbroad.setNestedScrollingEnabled(false); binding.rvAbroad.setAdapter(abroadConditionRvAdapter); mOperatePopupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_personal_notepad,null)); mOperatePopupWindow.getContentView().findViewById(R.id.layout_personal_notepad).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mOperatePopupWindow.dismiss(); AppManager.getAppManager().startActivity(PersonalNotepadActivity.class); } }); binding.ivOperate.setOnClickListener(v -> { mOperatePopupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); }); } @Override app/src/main/java/com/application/zhangshi_app_android/ui/function/PersonalNotepadActivity.java
New file @@ -0,0 +1,56 @@ package com.application.zhangshi_app_android.ui.function; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.PersonalNotepadRvAdapter; import com.application.zhangshi_app_android.adapter.PrivacyRvAdapter; import com.application.zhangshi_app_android.databinding.ActivityPersonalNotepadBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; /** * @author Ljj * @date 2023.05.14. 18:51 * @desc */ public class PersonalNotepadActivity extends DLBaseActivity<ActivityPersonalNotepadBinding,PersonalNotepadActivityViewModel> { private PersonalNotepadRvAdapter adapter; @Override public int getLayoutId() { return R.layout.activity_personal_notepad; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { adapter = new PersonalNotepadRvAdapter(this); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12)); itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); binding.recyclerView.addItemDecoration(itemDecoration); binding.recyclerView.setAdapter(adapter); } @Override public void initData() { viewModel.getPersonalNotepads(); } @Override public void initLiveDataObserve() { viewModel.getDataListLiveData().observe(this, dataList -> { adapter.setData(dataList); }); } } app/src/main/java/com/application/zhangshi_app_android/ui/function/PersonalNotepadActivityViewModel.java
New file @@ -0,0 +1,61 @@ package com.application.zhangshi_app_android.ui.function; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.bean.PersonalNotepadBean; import com.application.zhangshi_app_android.bean.PrivacyBean; import com.application.zhangshi_app_android.data.DataRepository; import java.util.ArrayList; import java.util.List; /** * @author Ljj * @date 2023.05.14. 18:52 * @desc */ public class PersonalNotepadActivityViewModel extends BaseViewModel<DataRepository> { private MutableLiveData<List<PersonalNotepadBean>> dataListLiveData; public PersonalNotepadActivityViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } public MutableLiveData<List<PersonalNotepadBean>> getDataListLiveData() { if (dataListLiveData == null) { dataListLiveData = new MutableLiveData<>(); } return dataListLiveData; } public void setDataListLiveData(MutableLiveData<List<PersonalNotepadBean>> dataListLiveData) { this.dataListLiveData = dataListLiveData; } /** * 获取个人记事本列表 */ public void getPersonalNotepads() { List<PersonalNotepadBean> beans = new ArrayList<>(); for (int i = 0; i < 10; i++) { PersonalNotepadBean bean = new PersonalNotepadBean(); bean.setId(i); bean.setTitle("标题"+i); bean.setPerson("张三"+i); bean.setTime("2020-05-14 20:00:00"); bean.setPlace("北京市海淀区"+i); bean.setRemark("备注"+i); beans.add(bean); } dataListLiveData.setValue(beans); } } app/src/main/java/com/application/zhangshi_app_android/ui/function/PersonalNotepadDetailActivity.java
New file @@ -0,0 +1,100 @@ package com.application.zhangshi_app_android.ui.function; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import androidx.recyclerview.widget.GridLayoutManager; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.ImageRvAdapter; import com.application.zhangshi_app_android.bean.PersonalNotepadBean; import com.application.zhangshi_app_android.databinding.ActivityPersonalNotepadDetailBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Ljj * @date 2023.05.14. 20:37 * @desc */ public class PersonalNotepadDetailActivity extends DLBaseActivity<ActivityPersonalNotepadDetailBinding,PersonalNotepadDetailActivityViewModel> { private ImageRvAdapter adapter; @Override public int getLayoutId() { return R.layout.activity_personal_notepad_detail; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { if (getIntent().hasExtra("bean")){ viewModel.getBeanLiveData().setValue((PersonalNotepadBean) getIntent().getSerializableExtra("bean")); } } @Override public void initView() { adapter = new ImageRvAdapter(this); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); binding.rvImage.setLayoutManager(gridLayoutManager); binding.rvImage.setNestedScrollingEnabled(false); setIsEdited(false); } @Override public void initData() { } @Override public void initLiveDataObserve() { viewModel.getBeanLiveData().observe(this,bean -> { if (bean!=null){ String url = bean.getUrl(); if (url == null||url.isEmpty()){ return; } List<String> list; if (url.contains(",")){ String[] split = url.split(","); list = new ArrayList<>(Arrays.asList(split)); }else { list = new ArrayList<>(); list.add(url); } adapter.setData(list); } }); } public void setIsEdited(boolean isEdited){ disableAllEditText(getContentView(),isEdited); adapter.setIsEdited(isEdited); } public void disableAllEditText(ViewGroup viewGroup, boolean isEdited) { for (int i = 0; i < viewGroup.getChildCount(); i++) { View child = viewGroup.getChildAt(i); if (child instanceof ViewGroup) { disableAllEditText((ViewGroup) child,isEdited); } else if (child instanceof EditText) { child.setEnabled(isEdited); child.setFocusable(isEdited); child.setFocusableInTouchMode(isEdited); if (!isEdited){ child.clearFocus(); } } } } } app/src/main/java/com/application/zhangshi_app_android/ui/function/PersonalNotepadDetailActivityViewModel.java
New file @@ -0,0 +1,42 @@ package com.application.zhangshi_app_android.ui.function; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.bean.PersonalNotepadBean; import com.application.zhangshi_app_android.bean.PrivacyBean; import com.application.zhangshi_app_android.data.DataRepository; /** * @author Ljj * @date 2023.05.14. 20:40 * @desc */ public class PersonalNotepadDetailActivityViewModel extends BaseViewModel<DataRepository> { private MutableLiveData<PersonalNotepadBean> beanLiveData; public PersonalNotepadDetailActivityViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } public MutableLiveData<PersonalNotepadBean> getBeanLiveData() { if (beanLiveData == null) { beanLiveData = new MutableLiveData<>(); } return beanLiveData; } public void setBeanLiveData(MutableLiveData<PersonalNotepadBean> beanLiveData) { this.beanLiveData = beanLiveData; } } app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivity.java
New file @@ -0,0 +1,58 @@ package com.application.zhangshi_app_android.ui.function; import com.android.app_base.widget.LinearItemDecoration; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.PropertyRvAdapter; import com.application.zhangshi_app_android.adapter.TourismExperienceRvAdapter; import com.application.zhangshi_app_android.bean.TourismExperienceBean; import com.application.zhangshi_app_android.databinding.ActivityTourismExperienceBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; /** * @author Ljj * @date 2023.05.08. 20:26 * @desc 旅游经历 Activity */ public class TourismExperienceActivity extends DLBaseActivity<ActivityTourismExperienceBinding,TourismExperienceActivityViewModel> { private TourismExperienceRvAdapter adapter; @Override public int getLayoutId() { return R.layout.activity_tourism_experience; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { adapter = new TourismExperienceRvAdapter(this); LinearItemDecoration itemDecoration = new LinearItemDecoration(); itemDecoration.setBottomSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_12)); itemDecoration.setHorizontalSpace((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); itemDecoration.setFirstTop((int) getResources().getDimension(com.android.app_base.R.dimen.dp_20)); binding.recyclerView.addItemDecoration(itemDecoration); binding.recyclerView.setAdapter(adapter); } @Override public void initData() { viewModel.getTourismExperienceData(); } @Override public void initLiveDataObserve() { viewModel.getDataListLiveData().observe(this, dataList -> { adapter.setData(dataList); }); } } app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceActivityViewModel.java
New file @@ -0,0 +1,47 @@ package com.application.zhangshi_app_android.ui.function; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.bean.PropertyBean; import com.application.zhangshi_app_android.bean.TourismExperienceBean; import com.application.zhangshi_app_android.data.DataRepository; import java.util.List; /** * @author Ljj * @date 2023.05.08. 20:28 * @desc 旅游经历 ViewModel */ public class TourismExperienceActivityViewModel extends BaseViewModel<DataRepository> { private MutableLiveData<List<TourismExperienceBean>> dataListLiveData; public TourismExperienceActivityViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } /** * 获取旅游经历数据 */ public void getTourismExperienceData() { } public MutableLiveData<List<TourismExperienceBean>> getDataListLiveData() { if (dataListLiveData == null) { dataListLiveData = new MutableLiveData<>(); } return dataListLiveData; } public void setDataListLiveData(MutableLiveData<List<TourismExperienceBean>> dataListLiveData) { this.dataListLiveData = dataListLiveData; } } app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceDetailActivity.java
@@ -1,9 +1,102 @@ package com.application.zhangshi_app_android.ui.function; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import androidx.recyclerview.widget.GridLayoutManager; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.adapter.ImageRvAdapter; import com.application.zhangshi_app_android.bean.PropertyBean; import com.application.zhangshi_app_android.bean.TourismExperienceBean; import com.application.zhangshi_app_android.databinding.AcitivityTourismExperienceDetailBinding; import com.application.zhangshi_app_android.databinding.ActivityPropertyDetailBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Ljj * @date 2023.04.28. 22:49 * @desc * @desc 旅游经历详情 */ public class TourismExperienceDetailActivity { public class TourismExperienceDetailActivity extends DLBaseActivity<AcitivityTourismExperienceDetailBinding,TourismExperienceDetailActivityViewModel> { private ImageRvAdapter adapter; @Override public int getLayoutId() { return R.layout.acitivity_tourism_experience_detail; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { if (getIntent().hasExtra("bean")){ viewModel.getBeanLiveData().setValue((TourismExperienceBean) getIntent().getSerializableExtra("bean")); } } @Override public void initView() { adapter = new ImageRvAdapter(this); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); binding.rvImage.setLayoutManager(gridLayoutManager); binding.rvImage.setNestedScrollingEnabled(false); setIsEdited(false); } @Override public void initData() { } @Override public void initLiveDataObserve() { viewModel.getBeanLiveData().observe(this,bean -> { if (bean!=null){ String url = bean.getUrl(); if (url == null||url.isEmpty()){ return; } List<String> list; if (url.contains(",")){ String[] split = url.split(","); list = new ArrayList<>(Arrays.asList(split)); }else { list = new ArrayList<>(); list.add(url); } adapter.setData(list); } }); } public void setIsEdited(boolean isEdited){ disableAllEditText(getContentView(),isEdited); adapter.setIsEdited(isEdited); } public void disableAllEditText(ViewGroup viewGroup, boolean isEdited) { for (int i = 0; i < viewGroup.getChildCount(); i++) { View child = viewGroup.getChildAt(i); if (child instanceof ViewGroup) { disableAllEditText((ViewGroup) child,isEdited); } else if (child instanceof EditText) { child.setEnabled(isEdited); child.setFocusable(isEdited); child.setFocusableInTouchMode(isEdited); if (!isEdited){ child.clearFocus(); } } } } } app/src/main/java/com/application/zhangshi_app_android/ui/function/TourismExperienceDetailActivityViewModel.java
New file @@ -0,0 +1,42 @@ package com.application.zhangshi_app_android.ui.function; import android.app.Application; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.bean.PropertyBean; import com.application.zhangshi_app_android.bean.TourismExperienceBean; import com.application.zhangshi_app_android.data.DataRepository; /** * @author Ljj * @date 2023.05.08. 21:10 * @desc */ public class TourismExperienceDetailActivityViewModel extends BaseViewModel<DataRepository> { private MutableLiveData<TourismExperienceBean> beanLiveData; public TourismExperienceDetailActivityViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } public MutableLiveData<TourismExperienceBean> getBeanLiveData() { if (beanLiveData == null) { beanLiveData = new MutableLiveData<>(); } return beanLiveData; } public void setBeanLiveData(MutableLiveData<TourismExperienceBean> beanLiveData) { this.beanLiveData = beanLiveData; } } app/src/main/java/com/application/zhangshi_app_android/ui/personal_center/BasicInfoActivity.java
New file @@ -0,0 +1,43 @@ package com.application.zhangshi_app_android.ui.personal_center; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.databinding.ActivityBasicInfoBinding; import com.application.zhangshi_app_android.ui.DLBaseActivity; /** * @author Ljj * @date 2023.05.08. 22:07 * @desc 个人中心基本信息 Activity */ public class BasicInfoActivity extends DLBaseActivity<ActivityBasicInfoBinding,BasicInfoActivityViewModel> { @Override public int getLayoutId() { return R.layout.activity_basic_info; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { } @Override public void initView() { } @Override public void initData() { } @Override public void initLiveDataObserve() { } } app/src/main/java/com/application/zhangshi_app_android/ui/personal_center/BasicInfoActivityViewModel.java
New file @@ -0,0 +1,24 @@ package com.application.zhangshi_app_android.ui.personal_center; import android.app.Application; import androidx.annotation.NonNull; import com.android.app_base.base.viewmodel.BaseViewModel; import com.application.zhangshi_app_android.data.DataRepository; /** * @author Ljj * @date 2023.05.08. 22:08 * @desc 个人中心基本信息 ViewModel */ public class BasicInfoActivityViewModel extends BaseViewModel<DataRepository> { public BasicInfoActivityViewModel(@NonNull Application application) { super(application); } @Override protected DataRepository initModel() { return DataRepository.getInstance(); } } app/src/main/java/com/application/zhangshi_app_android/ui/personal_center/PersonalCenterFragment.java
@@ -1,18 +1,29 @@ package com.application.zhangshi_app_android.ui.personal_center; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.PopupWindow; import com.android.app_base.base.view.BaseFragment; import com.android.app_base.manager.AppManager; import com.android.app_base.utils.ScreenSizeUtils; import com.application.zhangshi_app_android.BR; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.databinding.FragmentPersonalCenterBinding; import com.application.zhangshi_app_android.ui.DLBaseFragment; import com.application.zhangshi_app_android.ui.dialog.PetOwnerInfoDialog; import com.application.zhangshi_app_android.ui.function.PetMemoActivity; /** * @author Ljj * @date 2023.03.15. 20:19 * @desc 个人中心 Fragment */ public class PersonalCenterFragment extends BaseFragment<FragmentPersonalCenterBinding,PersonalCenterFragmentViewModel> { public class PersonalCenterFragment extends DLBaseFragment<FragmentPersonalCenterBinding,PersonalCenterFragmentViewModel> { private PopupWindow popupWindow; public PersonalCenterFragment() { } @@ -39,7 +50,16 @@ @Override protected void initView() { View view = View.inflate(getSelfActivity(),R.layout.pop_operate_person_center,null); popupWindow = initPopUpWindow(view); setOnClickListener( view.findViewById(R.id.tv_basic_info), view.findViewById(R.id.tv_permission_setting) ); binding.ivOperate.setOnClickListener(v -> { popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(getSelfActivity(),85) +binding.ivOperate.getWidth(),0); }); } @Override @@ -51,4 +71,21 @@ protected void initLiveDataObserve() { } @Override public void onClick(View v) { super.onClick(v); int id = v.getId(); if (id == R.id.tv_basic_info){ popupWindow.dismiss(); AppManager.getAppManager().startActivity(BasicInfoActivity.class); }else if (id == R.id.tv_permission_setting){ popupWindow.dismiss(); } } @Override protected boolean isStatusBarImmersionEnabled() { return true; } } app/src/main/res/drawable-xhdpi/ic_contacts_import.png
app/src/main/res/drawable-xhdpi/ic_delete_tourism.png
app/src/main/res/drawable-xxhdpi/ic_contacts_import.png
app/src/main/res/drawable-xxhdpi/ic_delete_tourism.png
app/src/main/res/drawable/shape_ffebafb4_dash_line.xml
New file @@ -0,0 +1,12 @@ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="2dp" android:color="#FFEBAFB4" android:dashWidth="15dp" android:dashGap="10dp" /> </shape> app/src/main/res/layout/acitivity_tourism_experience_detail.xml
New file @@ -0,0 +1,228 @@ <?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> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.function.TourismExperienceDetailActivityViewModel" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_normal_background" android:orientation="vertical"> <com.android.app_base.widget.ExtendTitleBar android:layout_width="match_parent" android:layout_height="wrap_content" app:title="@{viewModel.beanLiveData.title}" app:titleGravity="left" /> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingHorizontal="20dp" android:paddingBottom="20dp" > <TextView android:layout_width="wrap_content" android:layout_marginTop="@dimen/dp_10" android:layout_height="@dimen/dp_20" android:text="标题" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:autofillHints="creditCardNumber" android:textColorHint="#6b000000" android:textColor="#DE000000" android:textSize="16sp" android:text="@={viewModel.beanLiveData.title}" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="时间" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.time}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="地点" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:text="@={viewModel.beanLiveData.address}" android:textColor="#DE000000" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="人物" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.person}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="旅期" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.travelTime}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="持证旅游" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.certificate}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="费用" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.cost}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="公费或自费" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" tools:text="自费" android:drawablePadding="10dp" android:drawableStart="@drawable/ic_radio_button_selected" android:text="@{viewModel.beanLiveData.free==1?`公费`:`自费`}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="备注" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.remark}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="电子文件" android:textColor="#767375" android:textSize="12sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_6b0000_stroke" > <com.android.app_base.widget.WrapRecyclerView android:id="@+id/rv_image" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginTop="2sp" android:paddingStart="10dp" android:paddingEnd="5dp" android:paddingVertical="10dp" /> </RelativeLayout> </LinearLayout> </ScrollView> </LinearLayout> </layout> app/src/main/res/layout/activity_basic_info.xml
New file @@ -0,0 +1,267 @@ <?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"> <data> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.personal_center.BasicInfoActivityViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_normal_background" > <com.android.app_base.widget.ExtendTitleBar android:id="@+id/title_bar" android:layout_width="match_parent" android:layout_height="wrap_content" app:title="基本资料" app:layout_constraintTop_toTopOf="parent" app:titleGravity="left" > <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:layout_marginHorizontal="16dp" android:layout_gravity="center_vertical|end" > <ImageView android:id="@+id/iv_operate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_operate" /> </FrameLayout> </com.android.app_base.widget.ExtendTitleBar> <ImageView android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintTop_toBottomOf="@id/title_bar" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" android:layout_marginTop="53dp" android:background="@drawable/bg_login_zhang" app:layout_constraintDimensionRatio="285:316" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginHorizontal="20dp" app:layout_constraintTop_toBottomOf="@id/title_bar" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="基本信息" android:textSize="20sp" android:textColor="@color/black" android:layout_marginTop="16dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="用户名称" android:textColor="@color/black" android:textSize="12sp" android:alpha="0.54" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="张三" android:textColor="#DE000000" android:textSize="16sp" android:layout_marginTop="5dp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#6B000000" android:layout_marginTop="8dp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机号码" android:textColor="@color/black" android:textSize="12sp" android:alpha="0.54" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="12345678901" android:textColor="#DE000000" android:textSize="16sp" android:layout_marginTop="5dp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#6B000000" android:layout_marginTop="8dp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="邮箱" android:textColor="@color/black" android:textSize="12sp" android:alpha="0.54" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="zhang@126.com" android:textColor="#DE000000" android:textSize="16sp" android:layout_marginTop="5dp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#6B000000" android:layout_marginTop="8dp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="性别" android:textColor="@color/black" android:textSize="12sp" android:alpha="0.54" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男" android:textColor="#DE000000" android:textSize="16sp" android:drawableStart="@drawable/ic_radio_button_selected" android:drawablePadding="5dp" /> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女" android:textColor="#DE000000" android:textSize="16sp" android:drawableStart="@drawable/ic_radio_button_unselected" android:drawablePadding="5dp" /> <View android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#6B000000" android:layout_marginTop="8dp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="60dp" > <androidx.cardview.widget.CardView android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardCornerRadius="10dp" app:cardBackgroundColor="#FFE0EEFE" app:cardElevation="0dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:text="保存" android:textColor="#FF282828" android:layout_marginVertical="12dp" android:layout_marginHorizontal="36dp" /> </androidx.cardview.widget.CardView> <androidx.cardview.widget.CardView android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardCornerRadius="10dp" app:cardBackgroundColor="#FFEBAFB4" app:cardElevation="0dp" android:layout_marginStart="30dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:text="关闭" android:textColor="#FF282828" android:layout_marginVertical="12dp" android:layout_marginHorizontal="36dp" /> </androidx.cardview.widget.CardView> </LinearLayout> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </layout> app/src/main/res/layout/activity_contacts.xml
@@ -109,10 +109,8 @@ android:background="@color/color_normal_background" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/titleBar" app:layout_constraintVertical_bias="1.0" tools:itemCount="10" tools:layout_editor_absoluteX="-81dp" tools:listitem="@layout/item_contacts" /> tools:listitem="@layout/item_family_assets" /> </androidx.constraintlayout.widget.ConstraintLayout> app/src/main/res/layout/activity_growth_experience.xml
@@ -19,7 +19,22 @@ android:layout_height="wrap_content" app:title="成长经历" app:titleGravity="left" /> > <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:layout_marginHorizontal="16dp" android:layout_gravity="center_vertical|end" > <ImageView android:id="@+id/iv_operate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_operate" /> </FrameLayout> </com.android.app_base.widget.ExtendTitleBar> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" app/src/main/res/layout/activity_personal_notepad.xml
New file @@ -0,0 +1,146 @@ <?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> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.function.PersonalNotepadActivityViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.android.app_base.widget.ExtendTitleBar android:id="@+id/titleBar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" > <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:layout_marginHorizontal="16dp" android:layout_gravity="center_vertical|end" > <ImageView android:id="@+id/iv_operate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_operate" /> </FrameLayout> <LinearLayout android:id="@+id/layout_default" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginHorizontal="56dp" android:gravity="center_vertical" > <TextView android:id="@+id/tv_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:text="个人记事本(仅供查看)" android:ellipsize="marquee" android:maxLines="1" android:layout_weight="1" android:textColor="@color/white" android:textSize="@dimen/sp_20" /> <ImageView android:id="@+id/iv_search_default" android:layout_width="@dimen/dp_24" android:layout_height="@dimen/dp_24" android:background="@drawable/ic_search" /> </LinearLayout> <LinearLayout android:id="@+id/layout_search" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginVertical="4dp" android:layout_marginHorizontal="56dp" android:gravity="center_vertical" android:background="@color/white" android:paddingHorizontal="5dp" android:visibility="gone" > <ImageView android:id="@+id/iv_search" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_search_gray" /> <EditText android:id="@+id/et_search" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginStart="5dp" android:textSize="14sp" android:textColor="#61000000" android:background="@null" android:imeOptions="actionSearch" android:text="" android:singleLine="true" android:hint="在“家大事记内搜索”" /> <ImageView android:id="@+id/iv_search_type" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_search_by" /> </LinearLayout> </com.android.app_base.widget.ExtendTitleBar> <LinearLayout android:id="@+id/layout_data_null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/titleBar"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_data_null" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:text="暂时还没有数据哦~\n点击”+”立即创建" android:textSize="14sp" android:textColor="#73000000" /> </LinearLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="0dp" android:background="@color/color_normal_background" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/titleBar" app:layout_constraintVertical_bias="1.0" tools:itemCount="20" tools:layout_editor_absoluteX="-81dp" tools:listitem="@layout/item_family_assets" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout> app/src/main/res/layout/activity_personal_notepad_detail.xml
New file @@ -0,0 +1,158 @@ <?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> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.function.PersonalNotepadDetailActivityViewModel" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/color_normal_background" android:orientation="vertical"> <com.android.app_base.widget.ExtendTitleBar android:layout_width="match_parent" android:layout_height="wrap_content" app:title="@{viewModel.beanLiveData.title}" app:titleGravity="left" /> <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingHorizontal="20dp" android:paddingBottom="20dp" > <TextView android:layout_width="wrap_content" android:layout_marginTop="@dimen/dp_10" android:layout_height="@dimen/dp_20" android:text="标题" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:autofillHints="creditCardNumber" android:textColorHint="#6b000000" android:textColor="#DE000000" android:textSize="16sp" android:text="@{viewModel.beanLiveData.title}" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="时间" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.time}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="人物" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:text="@={viewModel.beanLiveData.person}" android:textColor="#DE000000" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="地点" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={viewModel.beanLiveData.place}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="备注" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@{viewModel.beanLiveData.remark}" android:textSize="16sp" /> <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="电子文件" android:textColor="#767375" android:textSize="12sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_6b0000_stroke" > <com.android.app_base.widget.WrapRecyclerView android:id="@+id/rv_image" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginTop="2sp" android:paddingStart="10dp" android:paddingEnd="5dp" android:paddingVertical="10dp" /> </RelativeLayout> </LinearLayout> </ScrollView> </LinearLayout> </layout> app/src/main/res/layout/activity_tourism.xml
@@ -6,7 +6,7 @@ <data> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.function.PrivacyActivityViewModel" /> type="com.application.zhangshi_app_android.ui.function.TourismActivityViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout @@ -47,7 +47,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:text="藏心密语(仅供查看)" android:text="旅游费用记录统计表" android:layout_weight="1" android:textColor="@color/white" android:textSize="@dimen/sp_20" app/src/main/res/layout/activity_tourism_experience.xml
New file @@ -0,0 +1,143 @@ <?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> <variable name="viewModel" type="com.application.zhangshi_app_android.ui.function.TourismExperienceActivityViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.android.app_base.widget.ExtendTitleBar android:id="@+id/titleBar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" > <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:layout_marginHorizontal="16dp" android:layout_gravity="center_vertical|end" > <ImageView android:id="@+id/iv_operate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_operate" /> </FrameLayout> <LinearLayout android:id="@+id/layout_default" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginHorizontal="56dp" android:gravity="center_vertical" > <TextView android:id="@+id/tv_title" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="16dp" android:text="旅游经历" android:layout_weight="1" android:textColor="@color/white" android:textSize="@dimen/sp_20" /> <ImageView android:id="@+id/iv_search_default" android:layout_width="@dimen/dp_24" android:layout_height="@dimen/dp_24" android:background="@drawable/ic_search" /> </LinearLayout> <LinearLayout android:id="@+id/layout_search" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginVertical="4dp" android:layout_marginHorizontal="56dp" android:gravity="center_vertical" android:background="@color/white" android:paddingHorizontal="5dp" android:visibility="gone" > <ImageView android:id="@+id/iv_search" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_search_gray" /> <EditText android:id="@+id/et_search" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:layout_marginStart="5dp" android:textSize="14sp" android:textColor="#61000000" android:background="@null" android:imeOptions="actionSearch" android:text="" android:singleLine="true" android:hint="在“家大事记内搜索”" /> <ImageView android:id="@+id/iv_search_type" android:layout_width="24dp" android:layout_height="24dp" android:background="@drawable/ic_search_by" /> </LinearLayout> </com.android.app_base.widget.ExtendTitleBar> <LinearLayout android:id="@+id/layout_data_null" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/titleBar"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/img_data_null" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:text="暂时还没有数据哦~\n点击”+”立即创建" android:textSize="14sp" android:textColor="#73000000" /> </LinearLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="0dp" android:background="@color/color_normal_background" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/titleBar" app:layout_constraintVertical_bias="1.0" tools:itemCount="20" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout> app/src/main/res/layout/dialog_contacts_info.xml
New file @@ -0,0 +1,253 @@ <?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> <variable name="bean" type="com.application.zhangshi_app_android.bean.ContactsDetailBean" /> </data> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" app:cardBackgroundColor="#FFFFFCFC" app:cardCornerRadius="5dp" android:layout_marginHorizontal="30dp"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/iv_dialog_close" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginEnd="15dp" android:background="@drawable/ic_dialog_close" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="30dp" android:layout_marginVertical="20dp" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toTopOf="parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="成员姓名:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.myName}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="称呼:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.nickName}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="姓名:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.name}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="工作单位:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.work}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.phone}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="其他联系方式:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{`微信号:`+ bean.wx}" android:textColor="@color/black" android:textSize="10sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="@{`QQ号:`+ bean.wx}" android:textColor="@color/black" android:textSize="10sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{`推特:`+ bean.wx}" android:textColor="@color/black" android:textSize="10sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="是否常联系:" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.is_always==1?`是`:`否`}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="备注" android:textColor="@color/black" android:textSize="14sp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="(是否存在金钱关系):" android:textColor="@color/black" android:textSize="10sp" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="@{bean.remark}" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="电子名片:" android:textColor="@color/black" android:textSize="14sp" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.cardview.widget.CardView> </layout> app/src/main/res/layout/fragment_personal_center.xml
@@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <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> <variable @@ -7,9 +9,267 @@ type="com.application.zhangshi_app_android.ui.personal_center.PersonalCenterFragmentViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/color_normal_background" > <com.android.app_base.widget.ExtendTitleBar android:layout_width="match_parent" android:layout_height="wrap_content" app:title="个人中心" app:titleGravity="left" android:elevation="5dp" > <FrameLayout android:layout_width="24dp" android:layout_height="24dp" android:layout_marginHorizontal="16dp" android:layout_gravity="center_vertical|end" > <ImageView android:id="@+id/iv_operate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/ic_operate" /> </FrameLayout> </com.android.app_base.widget.ExtendTitleBar> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingBottom="20dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="个人中心" android:textSize="20sp" android:textColor="@color/black" android:layout_marginStart="20dp" android:layout_marginTop="16dp" /> <View android:layout_width="match_parent" android:layout_height="2dp" android:background="#33000000" android:layout_marginTop="24dp" /> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <androidx.constraintlayout.utils.widget.ImageFilterView android:layout_width="0dp" android:layout_height="0dp" android:layout_marginVertical="25dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent="0.3" app:roundPercent="1" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" app:layout_constraintBottom_toBottomOf="parent" android:layout_marginHorizontal="15dp" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="15dp" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="用户名称" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="张三" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="手机号码" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="13234567890" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="用户邮箱" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="zhang@126.com" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="所属家庭" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="张三家庭" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="所属角色" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="家庭管理员" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingVertical="12dp" android:paddingHorizontal="10dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="创建日期" /> <TextView android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="#FF212121" android:text="@{}" android:gravity="end" tools:text="2023-04-01" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#33000000" /> </LinearLayout> </LinearLayout> </ScrollView> </LinearLayout> </layout> app/src/main/res/layout/item_consume_record.xml
New file @@ -0,0 +1,214 @@ <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="bean" type="com.application.zhangshi_app_android.bean.ConsumeRecordBean" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_marginTop="10dp" android:layout_height="wrap_content" android:text="总金额" android:textColor="#767375" android:textSize="12sp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <EditText android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:layout_marginTop="2dp" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={bean.content}" android:textSize="16sp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_delete_tourism" android:layout_marginHorizontal="16dp" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="总金额" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={bean.totalMoney}" android:textSize="16sp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="餐费" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={bean.mealMoney}" android:textSize="16sp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="住宿" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" tools:text="aaa" android:text="@={bean.hotelMoney}" android:textSize="16sp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="交通" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={bean.trafficMoney}" android:textSize="16sp" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="12dp" > <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="门票" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" tools:text="aaa" android:text="@={bean.ticketMoney}" android:textSize="16sp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:layout_marginStart="40dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="购物" android:textColor="#767375" android:textSize="12sp" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:textColorHint="#6b000000" android:textColor="#DE000000" android:text="@={bean.shoppingMoney}" android:textSize="16sp" /> </LinearLayout> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="3dp" android:background="@drawable/shape_ffebafb4_dash_line" android:layout_marginVertical="18dp" /> </LinearLayout> </layout> app/src/main/res/layout/item_contacts.xml
@@ -16,8 +16,9 @@ <androidx.cardview.widget.CardView android:id="@+id/cardView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/dp_2" android:layout_height="40dp" android:layout_margin="2dp" tools:layout_height="wrap_content" app:cardCornerRadius="@dimen/dp_10" app:cardBackgroundColor="@color/color_card_pink" > @@ -30,85 +31,31 @@ android:id="@+id/layout_title" android:layout_width="match_parent" android:layout_height="@dimen/dp_40" android:gravity="center_vertical|center_horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_gravity="center" android:textSize="@dimen/sp_16" android:layout_centerInParent="true" android:text="@{bean.myName+` 的 通 讯 录`}" android:textColor="@color/black" android:gravity="center" android:textSize="@dimen/sp_16" android:textStyle="bold" tools:text="张三的通讯录" /> tools:text="张三 的 通 讯 录" /> </RelativeLayout> <LinearLayout android:id="@+id/layout_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingHorizontal="@dimen/dp_24" android:layout_marginBottom="30dp" > <LinearLayout <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="张二" android:textColor="@color/black" android:textSize="@dimen/sp_14" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="父亲" android:textColor="#80000000" android:textSize="@dimen/sp_12" android:layout_weight="1" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="张氏公司" android:textColor="#80000000" android:textSize="@dimen/sp_12" android:layout_weight="1" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="12345678901" android:textColor="#80000000" android:textSize="@dimen/sp_12" android:layout_weight="1" /> </LinearLayout> android:layout_marginHorizontal="25dp" tools:listitem="@layout/item_contacts_detail" /> </LinearLayout> </LinearLayout> app/src/main/res/layout/item_contacts_detail.xml
New file @@ -0,0 +1,106 @@ <?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> <variable name="bean" type="com.application.zhangshi_app_android.bean.ContactsDetailBean" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/transparent" android:layout_marginVertical="5dp" > <androidx.constraintlayout.utils.widget.ImageFilterView android:id="@+id/iv_avatar" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintDimensionRatio="1:1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:round="8dp" android:background="@color/teal_200" android:layout_margin="5dp" app:imageUrl="@{bean.url.split(`,`)[0]}" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginStart="15dp" app:layout_constraintStart_toEndOf="@id/iv_avatar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.name}" android:maxLines="1" android:textColor="@color/black" android:textSize="14sp" android:textStyle="bold" tools:text="姓名" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="8dp" > <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@{bean.nickName}" android:textColor="#80000000" android:textSize="@dimen/sp_12" android:layout_weight="2" android:maxLines="1" tools:text="称呼" android:layout_marginEnd="3dp" android:ellipsize="end" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@{bean.work}" android:textColor="#80000000" android:textSize="12sp" android:maxLines="1" android:layout_weight="3" tools:text="工作单位" android:layout_marginEnd="3dp" android:ellipsize="end" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="@{bean.phone}" android:ellipsize="end" android:textColor="#80000000" android:textSize="12sp" android:maxLines="1" android:layout_weight="4" tools:text="12345678901" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#BFFFFFFF" android:layout_marginTop="8dp" /> </LinearLayout> </androidx.constraintlayout.widget.ConstraintLayout> </layout> app/src/main/res/layout/item_daily_consume_record.xml
@@ -8,7 +8,12 @@ <data> <variable name="bean" type="com.application.zhangshi_app_android.bean.DailyConsumeRecordBean" /> type="com.application.zhangshi_app_android.bean.DailyConsumeRecordBean" /> <variable name="isFold" type="boolean" /> </data> <androidx.cardview.widget.CardView @@ -48,9 +53,10 @@ android:background="@drawable/ic_tourism_add" /> <ImageView android:id="@+id/iv_fold" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_fold" android:background="@{isFold?@drawable/ic_fold:@drawable/ic_unfold}" android:layout_marginStart="10dp" /> </LinearLayout> app/src/main/res/layout/item_personal_notepad.xml
New file @@ -0,0 +1,197 @@ <?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> <variable name="bean" type="com.application.zhangshi_app_android.bean.PersonalNotepadBean" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <androidx.cardview.widget.CardView android:id="@+id/cardView" android:layout_width="match_parent" android:layout_height="40dp" android:layout_margin="@dimen/dp_2" app:cardCornerRadius="@dimen/dp_10" app:cardBackgroundColor="@color/color_card_pink" tools:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/layout_title" android:layout_width="match_parent" android:layout_height="@dimen/dp_40" android:gravity="center_vertical"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="25dp" android:text="@{bean.title}" android:textColor="@color/black" android:textSize="@dimen/sp_16" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="房产证" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.time}" android:textColor="@color/black" android:textSize="16sp" android:layout_marginEnd="25dp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="2019-01-12" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:id="@+id/layout_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingHorizontal="35dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="序号:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{String.valueOf(bean.id)}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人物:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.person}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地点:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.place}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="备注:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.remark}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_6" android:text="电子文件:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_15" > <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_image" android:layout_width="match_parent" android:layout_height="wrap_content" tools:listitem="@layout/item_image" tools:itemCount="3" /> </LinearLayout> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout> </layout> app/src/main/res/layout/item_tourism_experience.xml
New file @@ -0,0 +1,270 @@ <?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> <variable name="bean" type="com.application.zhangshi_app_android.bean.TourismExperienceBean" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <androidx.cardview.widget.CardView android:id="@+id/cardView" android:layout_width="match_parent" android:layout_height="40dp" android:layout_margin="@dimen/dp_2" app:cardCornerRadius="@dimen/dp_10" app:cardBackgroundColor="@color/color_card_pink" tools:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/layout_title" android:layout_width="match_parent" android:layout_height="@dimen/dp_40" android:gravity="center_vertical"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="25dp" android:text="@{bean.title}" android:textColor="@color/black" android:textSize="@dimen/sp_16" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="游云南" /> <TextView android:id="@+id/tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.time}" android:textColor="@color/black" android:textSize="16sp" android:layout_marginEnd="25dp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="2019-01-12" /> </androidx.constraintlayout.widget.ConstraintLayout> <LinearLayout android:id="@+id/layout_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingHorizontal="35dp" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="地点:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.address}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="人物:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.person}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="旅期:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.travelTime}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="持证旅游:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.certificate}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="费用:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.cost}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="公费或自费:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.free==1?`公费`:`自费`}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_6" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="备注:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{bean.remark}" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dp_6" android:text="电子文件:" android:textColor="@color/black" android:textSize="@dimen/sp_12" android:textStyle="bold" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="@dimen/dp_15" > <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_image" android:layout_width="match_parent" android:layout_height="wrap_content" tools:listitem="@layout/item_image" tools:itemCount="3" /> </LinearLayout> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> </LinearLayout> </layout> app/src/main/res/layout/pop_contacts_import.xml
New file @@ -0,0 +1,38 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardBackgroundColor="#FFFAD1E0" app:cardCornerRadius="10dp" app:cardElevation="0dp" > <LinearLayout android:layout_width="85dp" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <LinearLayout android:id="@+id/layout_contacts_import" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <TextView android:id="@+id/tv_contacts_import" android:layout_width="wrap_content" android:layout_height="32dp" android:gravity="center" android:text="导入" android:textColor="#FF333333" android:textSize="12sp" app:drawableStartCompat="@drawable/ic_contacts_import" android:drawablePadding="5dp" /> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> app/src/main/res/layout/pop_operate_person_center.xml
New file @@ -0,0 +1,42 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardBackgroundColor="#FFFAD1E0" app:cardCornerRadius="10dp" app:cardElevation="0dp" > <LinearLayout android:layout_width="85dp" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <TextView android:id="@+id/tv_basic_info" android:layout_width="wrap_content" android:layout_height="30dp" android:gravity="center" android:text="基本信息" android:textColor="#FF333333" android:textSize="12sp" /> <View android:layout_width="match_parent" android:layout_height="0.3dp" android:background="#FF939393" /> <TextView android:id="@+id/tv_permission_setting" android:layout_width="wrap_content" android:layout_height="30dp" android:text="权限设置" android:gravity="center" android:textColor="#FF333333" android:textSize="12sp" /> </LinearLayout> </androidx.cardview.widget.CardView> app/src/main/res/layout/pop_personal_notepad.xml
New file @@ -0,0 +1,37 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardBackgroundColor="#FFFAD1E0" app:cardCornerRadius="10dp" app:cardElevation="0dp" > <LinearLayout android:layout_width="85dp" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <LinearLayout android:id="@+id/layout_personal_notepad" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal" > <TextView android:id="@+id/tv_personal_notepad" android:layout_width="wrap_content" android:layout_height="32dp" android:gravity="center" android:text="个人记事本" android:textColor="#FF333333" android:textSize="12sp" android:drawablePadding="5dp" /> </LinearLayout> </LinearLayout> </androidx.cardview.widget.CardView> app_base/build.gradle
@@ -68,6 +68,7 @@ //图片相关 api 'com.github.bumptech.glide:glide:4.14.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' //内存泄露工具 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1' app_base/src/main/java/com/android/app_base/base/view/BaseFragment.java
@@ -4,7 +4,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import androidx.annotation.IdRes; import androidx.annotation.NonNull; @@ -18,6 +17,7 @@ import com.android.app_base.action.TitleBarAction; import com.android.app_base.base.StateViewEnum; import com.android.app_base.base.action.ClickAction; import com.android.app_base.base.viewmodel.BaseViewModel; import com.gyf.immersionbar.ImmersionBar; import com.hjq.bar.TitleBar; @@ -30,8 +30,8 @@ * @date 2023.03.02. 15:50 * @desc Fragment基类 */ public abstract class BaseFragment<V extends ViewDataBinding,VM extends BaseViewModel> extends Fragment implements TitleBarAction { protected V binding; public abstract class BaseFragment<VDB extends ViewDataBinding,VM extends BaseViewModel> extends Fragment implements TitleBarAction, ClickAction { protected VDB binding; protected VM viewModel; private int viewModelId; @@ -65,12 +65,13 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { isLoaded = false; if (getLayoutId() > 0){ binding = DataBindingUtil.inflate(inflater,getLayoutId(), container, false); binding = initViewBinding(inflater, container); mRootView = binding.getRoot(); return mRootView; } return null; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { @@ -122,6 +123,13 @@ getLifecycle().addObserver(viewModel); } /** * 初始化ViewBinding */ protected VDB initViewBinding(LayoutInflater inflater, @Nullable ViewGroup container) { return DataBindingUtil.inflate(inflater,getLayoutId(), container, false); } /** * 初始化ViewModel