新版本 #16

Open
px8tqwyol wants to merge 1 commits from caijianyu_part into master

@ -0,0 +1,82 @@
package com.startsmake.llrisetabbardemo.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.startsmake.llrisetabbardemo.R;
import com.startsmake.llrisetabbardemo.model.Item;
import java.util.List;
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder> {
private Context context;
private List<Item> itemList;
private OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(Item item);
}
public ProductAdapter(Context context, List<Item> itemList, OnItemClickListener listener) {
this.context = context;
this.itemList = itemList;
this.listener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_product, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
Item item = itemList.get(position);
holder.tvTitle.setText(item.getTitle());
holder.tvPrice.setText(String.format("¥%.2f", item.getPrice()));
holder.tvLocation.setText(item.getLocation());
// 设置发布时间
String time = android.text.format.DateFormat.format("MM-dd HH:mm", item.getPublishTime()).toString();
holder.tvTime.setText(time);
// 设置点击事件
holder.itemView.setOnClickListener(v -> {
if (listener != null) {
listener.onItemClick(item);
}
});
}
@Override
public int getItemCount() {
return itemList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
ImageView ivImage;
TextView tvTitle;
TextView tvPrice;
TextView tvLocation;
TextView tvTime;
public ViewHolder(@NonNull View itemView) {
super(itemView);
ivImage = itemView.findViewById(R.id.ivProductImage);
tvTitle = itemView.findViewById(R.id.tvProductTitle);
tvPrice = itemView.findViewById(R.id.tvProductPrice);
tvLocation = itemView.findViewById(R.id.tvProductLocation);
tvTime = itemView.findViewById(R.id.tvProductTime);
}
}
}

@ -0,0 +1,89 @@
package com.startsmake.llrisetabbardemo.fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.startsmake.llrisetabbardemo.R;
import com.startsmake.llrisetabbardemo.model.Item;
public class ItemDetailFragment extends Fragment {
private static final String ARG_ITEM = "item";
private Item item;
public static ItemDetailFragment newInstance(Item item) {
ItemDetailFragment fragment = new ItemDetailFragment();
Bundle args = new Bundle();
args.putSerializable(ARG_ITEM, item);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
item = (Item) getArguments().getSerializable(ARG_ITEM);
}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_item_detail, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (item == null) {
Toast.makeText(getContext(), "商品信息加载失败", Toast.LENGTH_SHORT).show();
return;
}
// 初始化视图
ImageView ivItemImage = view.findViewById(R.id.ivItemImage);
TextView tvTitle = view.findViewById(R.id.tvTitle);
TextView tvPrice = view.findViewById(R.id.tvPrice);
TextView tvDescription = view.findViewById(R.id.tvDescription);
TextView tvCategory = view.findViewById(R.id.tvCategory);
TextView tvLocation = view.findViewById(R.id.tvLocation);
TextView tvContact = view.findViewById(R.id.tvContact);
TextView tvPublishTime = view.findViewById(R.id.tvPublishTime);
// 设置商品信息
tvTitle.setText(item.getTitle());
tvPrice.setText(String.format("¥%.2f", item.getPrice()));
tvDescription.setText(item.getDescription());
tvCategory.setText("分类:" + item.getCategory());
tvLocation.setText("位置:" + item.getLocation());
tvContact.setText("联系方式:" + item.getContact());
// 设置发布时间
String time = android.text.format.DateFormat.format("yyyy-MM-dd HH:mm", item.getPublishTime()).toString();
tvPublishTime.setText("发布时间:" + time);
// 加载图片(这里使用第一张图片作为主图)
if (item.getImageUrls() != null && !item.getImageUrls().isEmpty()) {
// 实际项目中这里应该加载网络图片,这里用占位符
ivItemImage.setImageResource(R.mipmap.ic_launcher);
}
// 联系卖家按钮
view.findViewById(R.id.btnContact).setOnClickListener(v -> {
Toast.makeText(getContext(), "联系卖家:" + item.getContact(), Toast.LENGTH_SHORT).show();
});
}
}

@ -0,0 +1,171 @@
package com.startsmake.llrisetabbardemo.manager;
import com.startsmake.llrisetabbardemo.model.Item;
import java.util.ArrayList;
import java.util.List;
/**
* - 使
*
*/
public class DataManager {
// 单例实例
private static DataManager instance;
// 商品列表
private List<Item> itemList;
// 私有构造函数,防止外部创建实例
private DataManager() {
itemList = new ArrayList<>();
// 初始化时添加一些示例数据
initSampleData();
}
/**
*
* @return DataManager
*/
public static DataManager getInstance() {
if (instance == null) {
instance = new DataManager();
}
return instance;
}
/**
*
*/
private void initSampleData() {
// 示例商品1 - 数码产品
Item item1 = new Item();
item1.setId("item_001");
item1.setTitle("全新iPhone 13 Pro");
item1.setDescription("全新未拆封256GB远峰蓝色国行正品带发票");
item1.setPrice(6999.00);
item1.setCategory("数码产品");
item1.setLocation("北京");
item1.setContact("138****1234");
item1.setPublishTime(System.currentTimeMillis() - 2 * 60 * 60 * 1000); // 2小时前发布
itemList.add(item1);
// 示例商品2 - 数码产品
Item item2 = new Item();
item2.setId("item_002");
item2.setTitle("二手笔记本电脑");
item2.setDescription("联想小新i5处理器8GB内存256GB固态硬盘95成新");
item2.setPrice(2500.00);
item2.setCategory("数码产品");
item2.setLocation("上海");
item2.setContact("微信abc123");
item2.setPublishTime(System.currentTimeMillis() - 5 * 60 * 60 * 1000); // 5小时前发布
itemList.add(item2);
// 示例商品3 - 服装鞋帽
Item item3 = new Item();
item3.setId("item_003");
item3.setTitle("品牌运动鞋");
item3.setDescription("耐克运动鞋42码只穿过几次几乎全新原盒在");
item3.setPrice(299.00);
item3.setCategory("服装鞋帽");
item3.setLocation("广州");
item3.setContact("159****5678");
item3.setPublishTime(System.currentTimeMillis() - 24 * 60 * 60 * 1000); // 1天前发布
itemList.add(item3);
// 示例商品4 - 图书文具
Item item4 = new Item();
item4.setId("item_004");
item4.setTitle("Java编程思想");
item4.setDescription("Java编程思想第5版几乎全新无笔记无划痕");
item4.setPrice(45.00);
item4.setCategory("图书文具");
item4.setLocation("杭州");
item4.setContactQQ("123456789");
item4.setPublishTime(System.currentTimeMillis() - 3 * 24 * 60 * 60 * 1000); // 3天前发布
itemList.add(item4);
}
/**
*
* @return
*/
public List<Item> getAllItems() {
return itemList;
}
/**
*
* @param item
*/
public void addItem(Item item) {
// 为新商品生成ID
item.setId("item_" + System.currentTimeMillis());
// 设置发布时间
item.setPublishTime(System.currentTimeMillis());
// 将新商品添加到列表最前面(最新发布的显示在最前面)
itemList.add(0, item);
}
/**
* ID
* @param id ID
* @return null
*/
public Item getItemById(String id) {
for (Item item : itemList) {
if (item.getId().equals(id)) {
return item;
}
}
return null;
}
/**
*
* @param category
* @return
*/
public List<Item> getItemsByCategory(String category) {
List<Item> result = new ArrayList<>();
for (Item item : itemList) {
if (item.getCategory().equals(category)) {
result.add(item);
}
}
return result;
}
/**
*
* @param keyword
* @return
*/
public List<Item> searchItems(String keyword) {
List<Item> result = new ArrayList<>();
for (Item item : itemList) {
if (item.getTitle().toLowerCase().contains(keyword.toLowerCase()) ||
item.getDescription().toLowerCase().contains(keyword.toLowerCase())) {
result.add(item);
}
}
return result;
}
/**
*
* @return
*/
public int getItemCount() {
return itemList.size();
}
/**
*
*/
public void clearAll() {
itemList.clear();
}
}

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:background="#f5f5f5">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 商品图片 -->
<ImageView
android:id="@+id/ivItemImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:scaleType="centerCrop"
android:background="@drawable/bg_image_border"
android:src="@mipmap/ic_launcher" />
<!-- 商品基本信息 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/white"
android:padding="16dp"
android:layout_marginTop="8dp">
<TextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品标题"
android:textSize="18sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textColor="#ff4444"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginTop="8dp" />
</LinearLayout>
<!-- 商品详情 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/white"
android:padding="16dp"
android:layout_marginTop="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品详情"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品描述"
android:textSize="14sp"
android:layout_marginTop="8dp"
android:lineSpacingExtra="4dp" />
</LinearLayout>
<!-- 商品信息 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@android:color/white"
android:padding="16dp"
android:layout_marginTop="8dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品信息"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvCategory"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="分类:"
android:textSize="14sp"
android:layout_marginTop="8dp" />
<TextView
android:id="@+id/tvLocation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="位置:"
android:textSize="14sp"
android:layout_marginTop="4dp" />
<TextView
android:id="@+id/tvContact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="联系方式:"
android:textSize="14sp"
android:layout_marginTop="4dp" />
<TextView
android:id="@+id/tvPublishTime"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发布时间:"
android:textSize="14sp"
android:layout_marginTop="4dp" />
</LinearLayout>
<!-- 联系卖家按钮 -->
<Button
android:id="@+id/btnContact"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="联系卖家"
android:textSize="16sp"
android:textStyle="bold"
android:background="@drawable/bg_button_primary"
android:textColor="@android:color/white"
android:layout_marginTop="16dp" />
</LinearLayout>
</ScrollView>

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="12dp"
android:background="@android:color/white"
android:layout_marginBottom="8dp"
android:clickable="true"
android:focusable="true"
android:foreground="?android:attr/selectableItemBackground">
<!-- 商品图片 -->
<ImageView
android:id="@+id/ivProductImage"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerCrop"
android:background="@drawable/bg_image_border"
android:src="@mipmap/ic_launcher" />
<!-- 商品信息 -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:paddingStart="12dp">
<TextView
android:id="@+id/tvProductTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="商品标题"
android:textSize="16sp"
android:maxLines="2"
android:ellipsize="end" />
<TextView
android:id="@+id/tvProductPrice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="¥0.00"
android:textColor="#ff4444"
android:textSize="18sp"
android:textStyle="bold"
android:layout_marginTop="4dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="4dp">
<TextView
android:id="@+id/tvProductLocation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="位置"
android:textSize="12sp"
android:textColor="#666" />
<TextView
android:id="@+id/tvProductTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="时间"
android:textSize="12sp"
android:textColor="#666" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
Loading…
Cancel
Save