diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6b506a9..2284297 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -143,6 +143,21 @@ android:configChanges="orientation|screenSize|keyboardHidden" android:exported="false" android:screenOrientation="portrait" /> + + + { + + private MyProductAdapter adapter; + + @Override + protected Class getBindingClass() { + return ActivityMyProductBinding.class; + } + + @Override + protected void initStatusBar() { + ImmersionBar.with(this).fitsSystemWindows(false).transparentStatusBar() + .statusBarDarkFont(true).init(); + } + + @Override + protected void onQueryArguments() { + } + + @Override + protected void onBindListener() { + binding.btnBack.setOnClickListener(new SingleClickListener() { + @Override + protected void onSingleClick(View v) { + finish(); + } + }); + } + + @Override + protected void onFindView(Bundle savedInstanceState) { + binding.refreshRecycler.setLayoutManager(new LinearLayoutManager(mContext)); + adapter = new MyProductAdapter(); + binding.refreshRecycler.setAdapter(adapter); + binding.refreshRecycler.setEnableRefresh(false); + binding.refreshRecycler.setNoMoreData(true); + adapter.setOnItemClickListener((baseQuickAdapter, view, i) -> { + }); + } + + @Override + protected void onApplyData() { + requestData(); + } + + private void requestData() { + String dataStr = AppUtil.loadJsonFromRaw(mContext, R.raw.my_product); + Gson gson = new Gson(); + List data = gson.fromJson(dataStr, new TypeToken>() { + }.getType()); + adapter.setNewData(data); + binding.refreshRecycler.showContent(); + } + + private class MyProductAdapter extends BaseQuickAdapter { + + public MyProductAdapter() { + super(R.layout.item_my_product); + } + + @Override + protected void convert(@NonNull BaseViewHolder holder, MyProductEntity entity) { + holder.setImageResource(R.id.image, AppUtil.getDrawableId(entity.getImgRes())); + holder.setText(R.id.name, entity.getName()); + holder.setText(R.id.status, entity.getStatus().equals("0") ? "已停售" : "在售中"); + holder.setTextColor(R.id.status, getResColor(entity.getStatus().equals("0") ? R.color.color_txt_red : R.color.color_txt_green)); + holder.setText(R.id.price, "¥" + entity.getPrice()); + } + } +} diff --git a/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandActivity.java b/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandActivity.java index 7926eb5..a416938 100644 --- a/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandActivity.java +++ b/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandActivity.java @@ -3,6 +3,10 @@ package com.tairui.industrial_operation.ui.brand; import com.gyf.immersionbar.ImmersionBar; import com.tairui.industrial_operation.base.BaseActivity; import com.tairui.industrial_operation.databinding.ActivityPublicBrandBinding; +import com.tairui.industrial_operation.util.IntentUtil; +import com.tairui.industrial_operation.util.SingleClickListener; + +import android.view.View; public class PublicBrandActivity extends BaseActivity { @Override @@ -15,4 +19,20 @@ public class PublicBrandActivity extends BaseActivity { + + private PublicBrandDynamicsAdapter adapter; + + @Override + protected Class getBindingClass() { + return ActivityPublicBrandDynamicsBinding.class; + } + + @Override + protected void initStatusBar() { + ImmersionBar.with(this).fitsSystemWindows(false).transparentStatusBar() + .statusBarDarkFont(true).init(); + } + + @Override + protected void onQueryArguments() { + } + + @Override + protected void onBindListener() { + binding.btnBack.setOnClickListener(new SingleClickListener() { + @Override + protected void onSingleClick(View v) { + finish(); + } + }); + } + + @Override + protected void onFindView(Bundle savedInstanceState) { + binding.refreshRecycler.setLayoutManager(new LinearLayoutManager(mContext)); + adapter = new PublicBrandDynamicsAdapter(); + binding.refreshRecycler.setAdapter(adapter); + binding.refreshRecycler.setEnableRefresh(false); + binding.refreshRecycler.setNoMoreData(true); + adapter.setOnItemClickListener((baseQuickAdapter, view, i) -> { + Bundle bundle = new Bundle(); + bundle.putSerializable("data", adapter.getData().get(i)); + IntentUtil.startActivity(mContext, PublicBrandDynamicsDetailActivity.class, bundle); + }); + } + + @Override + protected void onApplyData() { + requestData(); + } + + private void requestData() { + String dataStr = AppUtil.loadJsonFromRaw(mContext, R.raw.public_brand_dynamics); + Gson gson = new Gson(); + List data = gson.fromJson(dataStr, new TypeToken>() { + }.getType()); + adapter.setNewData(data); + binding.refreshRecycler.showContent(); + } + + private class PublicBrandDynamicsAdapter extends BaseQuickAdapter { + + public PublicBrandDynamicsAdapter() { + super(R.layout.item_public_brand_dynamics); + } + + @Override + protected void convert(@NonNull BaseViewHolder holder, PublicBrandDynamicsEntity entity) { + holder.setText(R.id.tvTitle, entity.getTitle()); + holder.setText(R.id.tvContent, entity.getContent()); + holder.setText(R.id.tvDate, entity.getDate()); + + } + } +} diff --git a/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandDynamicsDetailActivity.java b/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandDynamicsDetailActivity.java new file mode 100644 index 0000000..1d06fc8 --- /dev/null +++ b/app/src/main/java/com/tairui/industrial_operation/ui/brand/PublicBrandDynamicsDetailActivity.java @@ -0,0 +1,48 @@ +package com.tairui.industrial_operation.ui.brand; + +import com.gyf.immersionbar.ImmersionBar; +import com.tairui.industrial_operation.base.BaseActivity; +import com.tairui.industrial_operation.databinding.ActivityPublicBrandDynamicsDetailBinding; +import com.tairui.industrial_operation.ui.brand.entity.PublicBrandDynamicsEntity; +import com.tairui.industrial_operation.util.SingleClickListener; + +import android.os.Bundle; +import android.view.View; + +public class PublicBrandDynamicsDetailActivity extends BaseActivity { + + private PublicBrandDynamicsEntity mData; + + @Override + protected Class getBindingClass() { + return ActivityPublicBrandDynamicsDetailBinding.class; + } + + @Override + protected void initStatusBar() { + ImmersionBar.with(this).fitsSystemWindows(false).transparentStatusBar().statusBarDarkFont(true).init(); + } + + @Override + protected void onQueryArguments() { + mData = (PublicBrandDynamicsEntity) getIntent().getSerializableExtra("data"); + } + + @Override + protected void onFindView(Bundle savedInstanceState) { + setText(binding.tvTitle, mData.getTitle()); + setText(binding.tvDate, "发布日期:" + mData.getDate()); + setText(binding.tvContent, mData.getContent()); + } + + @Override + protected void onBindListener() { + binding.btnBack.setOnClickListener(new SingleClickListener() { + @Override + protected void onSingleClick(View v) { + finish(); + } + }); + } + +} diff --git a/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/MyProductEntity.java b/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/MyProductEntity.java new file mode 100644 index 0000000..112980d --- /dev/null +++ b/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/MyProductEntity.java @@ -0,0 +1,46 @@ +package com.tairui.industrial_operation.ui.brand.entity; + +import java.io.Serializable; + +public class MyProductEntity implements Serializable { + + private String imgRes; + + private String name; + + private String price; + + private String status; //0-停售,1-在售中 + + public String getImgRes() { + return imgRes; + } + + public void setImgRes(String imgRes) { + this.imgRes = imgRes; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } +} diff --git a/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/PublicBrandDynamicsEntity.java b/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/PublicBrandDynamicsEntity.java new file mode 100644 index 0000000..f3eb9c4 --- /dev/null +++ b/app/src/main/java/com/tairui/industrial_operation/ui/brand/entity/PublicBrandDynamicsEntity.java @@ -0,0 +1,34 @@ +package com.tairui.industrial_operation.ui.brand.entity; + +import java.io.Serializable; + +public class PublicBrandDynamicsEntity implements Serializable { + + private String title; + private String content; + private String date; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } +} diff --git a/app/src/main/java/com/tairui/industrial_operation/util/AppUtil.java b/app/src/main/java/com/tairui/industrial_operation/util/AppUtil.java index a89ad74..3289df4 100644 --- a/app/src/main/java/com/tairui/industrial_operation/util/AppUtil.java +++ b/app/src/main/java/com/tairui/industrial_operation/util/AppUtil.java @@ -1,35 +1,69 @@ package com.tairui.industrial_operation.util; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import com.tairui.industrial_operation.R; import com.tairui.industrial_operation.ui.photoview.PhotoViewActivty; import com.tairui.industrial_operation.widget.loading.LoadingDialog; import android.content.Context; import android.os.Bundle; +import androidx.annotation.RawRes; public class AppUtil { - public static LoadingDialog getLoading(Context context) { - return getLoading(context, 1); - } + public static LoadingDialog getLoading(Context context) { + return getLoading(context, 1); + } - public static LoadingDialog getLoading(Context context, int style) { - if (null != context) { - LoadingDialog loading = new LoadingDialog(context); - loading.setLoadStyle(style); //STYLE_RING = 0; STYLE_LINE = 1; - loading.setLoadingText(null); - loading.setInterceptBack(false); - return loading; - } else { - return null; - } - } + public static LoadingDialog getLoading(Context context, int style) { + if (null != context) { + LoadingDialog loading = new LoadingDialog(context); + loading.setLoadStyle(style); //STYLE_RING = 0; STYLE_LINE = 1; + loading.setLoadingText(null); + loading.setInterceptBack(false); + return loading; + } else { + return null; + } + } - public static void startPhotoView(Context context, ArrayList imgs){ - Bundle bundle = new Bundle(); - bundle.putInt("index", 0); - bundle.putStringArrayList("imgs", imgs); - IntentUtil.startActivity(context, PhotoViewActivty.class, bundle); - } + public static void startPhotoView(Context context, ArrayList imgs) { + Bundle bundle = new Bundle(); + bundle.putInt("index", 0); + bundle.putStringArrayList("imgs", imgs); + IntentUtil.startActivity(context, PhotoViewActivty.class, bundle); + } + + public static String loadJsonFromRaw(Context context, @RawRes int rawRes) { + String jsonString = null; + try { + InputStream inputStream = context.getResources().openRawResource(rawRes); + int size = inputStream.available(); + byte[] buffer = new byte[size]; + inputStream.read(buffer); + inputStream.close(); + jsonString = new String(buffer, StandardCharsets.UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + return jsonString; + } + + // 根据图片名称获取本地资源ID + public static int getDrawableId(String imageName) { + try { + // 通过反射获取资源类的字段 + Field field = R.mipmap.class.getField(imageName); + return field.getInt(null); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + // 若没找到资源,返回默认图片 + return R.mipmap.ic_launcher; + } + } } diff --git a/app/src/main/res/drawable/bg_container_gray_raduis_30.xml b/app/src/main/res/drawable/bg_container_gray_raduis_30.xml new file mode 100644 index 0000000..c0d2c87 --- /dev/null +++ b/app/src/main/res/drawable/bg_container_gray_raduis_30.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_my_product.xml b/app/src/main/res/layout/activity_my_product.xml new file mode 100644 index 0000000..c610919 --- /dev/null +++ b/app/src/main/res/layout/activity_my_product.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_public_brand.xml b/app/src/main/res/layout/activity_public_brand.xml index 81a6964..62bbeeb 100644 --- a/app/src/main/res/layout/activity_public_brand.xml +++ b/app/src/main/res/layout/activity_public_brand.xml @@ -3,6 +3,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" + android:background="@color/color_f8f8f8" android:layout_height="match_parent"> - + + + + + android:layout_height="wrap_content"> - + - + - + - - - - - - - + + diff --git a/app/src/main/res/layout/activity_public_brand_dynamics.xml b/app/src/main/res/layout/activity_public_brand_dynamics.xml new file mode 100644 index 0000000..eb351a9 --- /dev/null +++ b/app/src/main/res/layout/activity_public_brand_dynamics.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_public_brand_dynamics_detail.xml b/app/src/main/res/layout/activity_public_brand_dynamics_detail.xml new file mode 100644 index 0000000..372d901 --- /dev/null +++ b/app/src/main/res/layout/activity_public_brand_dynamics_detail.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_my_product.xml b/app/src/main/res/layout/item_my_product.xml new file mode 100644 index 0000000..f98d425 --- /dev/null +++ b/app/src/main/res/layout/item_my_product.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_public_brand_dynamics.xml b/app/src/main/res/layout/item_public_brand_dynamics.xml new file mode 100644 index 0000000..806e5b8 --- /dev/null +++ b/app/src/main/res/layout/item_public_brand_dynamics.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-xxhdpi/pic_my_product_1.png b/app/src/main/res/mipmap-xxhdpi/pic_my_product_1.png new file mode 100644 index 0000000..273054e Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/pic_my_product_1.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/pic_my_product_2.png b/app/src/main/res/mipmap-xxhdpi/pic_my_product_2.png new file mode 100644 index 0000000..70fef96 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/pic_my_product_2.png differ diff --git a/app/src/main/res/raw/my_product.json b/app/src/main/res/raw/my_product.json new file mode 100644 index 0000000..4272b65 --- /dev/null +++ b/app/src/main/res/raw/my_product.json @@ -0,0 +1,14 @@ +[ + { + "name": "耿马普罗旺斯西红柿沙瓤番茄甄选番茄苗", + "imgRes": "pic_my_product_1", + "price": "4.50", + "status": "1" + }, + { + "name": "紫皮长茄子新鲜蔬菜细茄子长条茄子杭茄", + "imgRes": "pic_my_product_2", + "price": "4.50", + "status": "1" + } +] \ No newline at end of file diff --git a/app/src/main/res/raw/public_brand_dynamics.json b/app/src/main/res/raw/public_brand_dynamics.json new file mode 100644 index 0000000..b9c8550 --- /dev/null +++ b/app/src/main/res/raw/public_brand_dynamics.json @@ -0,0 +1,17 @@ +[ + { + "title": "《耿马农产品公共品牌使用规范》", + "content": "一、总则为规范“耿品”公共品牌(以下简称“品牌”)的使用与管理,维护品牌形象与声誉,保障消费者权益,促进耿马县农产品高质量发展,特制定本规范。二、品牌定位“耿品”品牌代表耿马县出产的,具有优良品质、鲜明地域特色及生态、健康、可信赖特质的农产品整体形象。三、使用原则1.自愿申请: 符合条件的主体自愿申请使用。2.授权许可: 经品牌管理机构审核授权后方可使用。3.统一管理: 遵循品牌标识系统、品质标准及宣传规范。4.权责一致: 使用者享有品牌权益,承担维护责任。四、申请主体资格1.在耿马县依法注册登记,从事相关农产品生产、加工、经营的企业、合作社、家庭农场等。2.具备合法有效的生产经营资质。3.产品符合国家及行业相关质量标准、安全规范。4.近三年内无重大质量安全、诚信经营不良记录。五、产品准入标准1.产地要求: 主要原料产自耿马县行政区域内。2.品质要求: 符合“耿品”品牌制定的具体产品品质标准(如理化指标、感官要求等)。3.认证要求: 鼓励通过绿色食品、有机产品、地理标志等认证。4包装要求: 使用经审核备案的包装设计,清晰标注品牌授权标识、产品信息、生产者信息、溯源信息等。六、品牌标识使用规范1.标准展示: 严格按照《“耿品”品牌视觉识别系统手册》规定使用标识,包括图形、字体、色彩、组合方式等,不得擅自更改。2.突出位置: 品牌主标识应在产品包装、宣传材料显著位置清晰展示。3.禁用情形: 不得用于未授权产品、不合格产品及可能损害品牌声誉的场合。七、使用流程1.申请: 提交申请表、主体资质证明、产品质检报告等材料。2.审核: 品牌管理机构组织材料审核与实地考察。3.签约: 审核通过后签订《“耿品”品牌使用授权协议》。4.授权: 颁发授权证书,明确授权产品范围、有效期。5.续期: 有效期届满前申请续期,重新审核。八、使用者义务1.维护品牌形象,保证产品质量安全。2.规范使用品牌标识,接受监督管理。3.建立产品溯源体系,确保来源可追溯。4.及时报告重大变更(如生产条件、产品标准变更)。5.配合品牌宣传推广活动。九、监督管理1.日常监管: 品牌管理机构进行不定期抽检和市场巡查。2.社会监督: 接受消费者、媒体等社会监督。3.违规处理: 对违反本规范或授权协议者,视情节轻重给予警告、责令整改、暂停授权直至撤销授权处理,并公告。十、退出机制授权期满未续期、主动申请退出、被撤销授权或主体资格丧失时,须立即停止使用品牌标识及相关宣传,并配合后续处理。十一、附则1.本规范由耿马县“耿品”品牌管理机构负责解释。2.本规范自发布之日起施行。", + "date": "2025.01.01" + }, + { + "title": "《云南省 “绿色食品牌” 品牌目录管理办法》", + "content": "该办法自 2021 年 9 月 1 日起施行,明确了云南省 “绿色食品牌” 品牌目录相关事宜。其中规定,申报产品为食用农产品的,应当获得绿色食品、有机农产品、良好农业规范(GAP)认证之一且在有效期内,或获得不低于绿色食品质量认证要求的其他质量或管理体系认证,才有资格申报品牌目录。入选品牌目录的品牌经云南省绿色食品发展中心授权后,许可使用云南省 “绿色食品牌” 统一形象标识。若违规使用形象标识,将被退出目录,且三年内不得再次申报。", + "date": "2021.09.01" + }, + { + "title": "《云南省绿色食品牌形象标识管理办法(试行)》", + "content": "该办法自 2021 年 1 月 18 日起实施,规定云南省 “绿色食品牌” 形象标识由云南省绿色食品发展中心依法申请全类商标注册,受法律保护。获得云南省 “绿色食品牌” 名品名企表彰的生产经营主体等可优先获得使用授权。形象标识经授权后,由使用主体自行印制或加贴使用,使用过程中不得更改图案、色相,但图形大小可按比例缩放。若不符合规定使用,或产地环境受污染、产品质量不合格等,不得继续使用该形象标识,还将被依法追究相关责任。", + "date": "2021.01.18" + } +] \ No newline at end of file