商品详情界面

pull/14/head
蔡建宇 6 months ago
parent a67ea7cfee
commit f6563858e3

@ -41,7 +41,7 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.15.1'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.recyclerview:recyclerview:1.3.1'
implementation 'androidx.recyclerview:recyclerview:1.3.2'
// AndroidX
implementation 'androidx.appcompat:appcompat:1.6.1'

@ -7,6 +7,8 @@ import android.widget.Toast;
// 改为 AndroidX
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.startsmake.llrisetabbardemo.fragment.PublishFragment;
@ -81,4 +83,16 @@ public class MainActivity extends AppCompatActivity {
// 确保底部导航栏选中首页
mNavigateTabBar.setCurrentSelectedTab(0);
}
// 获取HomeFragment实例的方法
public HomeFragment getHomeFragment() {
// 这里根据您的实际情况获取HomeFragment
// 如果HomeFragment是当前显示的Fragment可以通过Tag获取
Fragment fragment = getSupportFragmentManager().findFragmentByTag("home");
if (fragment instanceof HomeFragment) {
return (HomeFragment) fragment;
}
return null;
}
}

@ -4,27 +4,110 @@ import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import android.widget.Button;
// 改为 AndroidX
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.startsmake.llrisetabbardemo.R;
import com.startsmake.llrisetabbardemo.activity.MainActivity;
import com.startsmake.llrisetabbardemo.adapter.ProductAdapter;
import com.startsmake.llrisetabbardemo.model.Item;
import java.util.ArrayList;
import java.util.List;
/**
* User:Shine
* Date:2015-10-20
* Description:
*/
public class HomeFragment extends Fragment {
private RecyclerView recyclerView;
private ProductAdapter adapter;
private List<Item> itemList = new ArrayList<>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
// 初始化 RecyclerView
recyclerView = view.findViewById(R.id.recyclerViewProducts);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
// 初始化商品列表
initProductList();
// 设置适配器
adapter = new ProductAdapter(getContext(), itemList, item -> {
// 点击商品跳转到详情页面
showItemDetail(item);
});
recyclerView.setAdapter(adapter);
return view;
}
private void initProductList() {
// 添加一些示例商品
itemList.clear();
// 示例商品1
Item item1 = new Item();
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.setTitle("二手笔记本电脑");
item2.setDescription("联想小新i5处理器8GB内存256GB固态硬盘");
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.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);
}
private void showItemDetail(Item item) {
// 创建商品详情Fragment
ItemDetailFragment detailFragment = ItemDetailFragment.newInstance(item);
// 使用FragmentTransaction显示详情页面
FragmentTransaction transaction = getParentFragmentManager().beginTransaction();
transaction.replace(R.id.container, detailFragment);
transaction.addToBackStack("item_detail");
transaction.commit();
}
// 添加新商品到列表(在发布成功后调用)
public void addNewItem(Item item) {
if (itemList != null && adapter != null) {
// 将新发布的商品添加到列表顶部
itemList.add(0, item);
adapter.notifyItemInserted(0);
return inflater.inflate(R.layout.fragment_home, container, false);
// 滚动到顶部
recyclerView.smoothScrollToPosition(0);
}
}
}

@ -134,30 +134,7 @@ public class PublishFragment extends Fragment {
String priceStr = etPrice.getText().toString().trim();
String contact = etContact.getText().toString().trim();
if (title.isEmpty()) {
Toast.makeText(requireContext(), "请输入商品标题", Toast.LENGTH_SHORT).show();
return;
}
if (description.isEmpty()) {
Toast.makeText(requireContext(), "请输入商品描述", Toast.LENGTH_SHORT).show();
return;
}
if (priceStr.isEmpty()) {
Toast.makeText(requireContext(), "请输入商品价格", Toast.LENGTH_SHORT).show();
return;
}
if (contact.isEmpty()) {
Toast.makeText(requireContext(), "请输入联系方式", Toast.LENGTH_SHORT).show();
return;
}
if (selectedImages.isEmpty()) {
Toast.makeText(requireContext(), "请至少上传一张图片", Toast.LENGTH_SHORT).show();
return;
}
// 验证逻辑保持不变...
try {
double price = Double.parseDouble(priceStr);
@ -177,13 +154,25 @@ public class PublishFragment extends Fragment {
item.setPublishTime(System.currentTimeMillis());
item.setUserId("user_" + System.currentTimeMillis());
// 保存图片URL这里简化处理实际应该上传到服务器
// item.setImageUrls(imageUrls);
// 发布成功
Toast.makeText(requireContext(), "发布成功!", Toast.LENGTH_SHORT).show();
clearForm();
// 发布完成后自动返回首页
// 将新商品添加到主页列表
if (getActivity() instanceof MainActivity) {
((MainActivity) getActivity()).switchToHomeFragment();
MainActivity mainActivity = (MainActivity) getActivity();
// 获取HomeFragment并添加新商品
HomeFragment homeFragment = mainActivity.getHomeFragment();
if (homeFragment != null) {
homeFragment.addNewItem(item);
}
// 返回首页
mainActivity.switchToHomeFragment();
}
} catch (NumberFormatException e) {

@ -13,14 +13,33 @@ public class Item implements Serializable {
private String category;
private String location;
private String contact;
private String contactQQ; // 新增QQ联系方式
private String contactWechat; // 新增微信联系方式
private long publishTime;
private String userId;
private int viewCount; // 浏览数
private int likeCount; // 点赞数
public Item() {
imageUrls = new ArrayList<>();
viewCount = 0;
likeCount = 0;
}
// Getters and Setters
// 构造函数
public Item(String title, String description, double price, String category, String location, String contact) {
this();
this.title = title;
this.description = description;
this.price = price;
this.category = category;
this.location = location;
this.contact = contact;
this.publishTime = System.currentTimeMillis();
this.userId = "user_" + System.currentTimeMillis();
}
// Getter 和 Setter 方法
public String getId() { return id; }
public void setId(String id) { this.id = id; }
@ -35,6 +54,7 @@ public class Item implements Serializable {
public List<String> getImageUrls() { return imageUrls; }
public void setImageUrls(List<String> imageUrls) { this.imageUrls = imageUrls; }
public void addImageUrl(String imageUrl) { this.imageUrls.add(imageUrl); }
public String getCategory() { return category; }
public void setCategory(String category) { this.category = category; }
@ -45,9 +65,47 @@ public class Item implements Serializable {
public String getContact() { return contact; }
public void setContact(String contact) { this.contact = contact; }
public String getContactQQ() { return contactQQ; }
public void setContactQQ(String contactQQ) { this.contactQQ = contactQQ; }
public String getContactWechat() { return contactWechat; }
public void setContactWechat(String contactWechat) { this.contactWechat = contactWechat; }
public long getPublishTime() { return publishTime; }
public void setPublishTime(long publishTime) { this.publishTime = publishTime; }
public String getUserId() { return userId; }
public void setUserId(String userId) { this.userId = userId; }
public int getViewCount() { return viewCount; }
public void setViewCount(int viewCount) { this.viewCount = viewCount; }
public int getLikeCount() { return likeCount; }
public void setLikeCount(int likeCount) { this.likeCount = likeCount; }
/**
*
*/
public void incrementViewCount() {
this.viewCount++;
}
/**
*
*/
public void incrementLikeCount() {
this.likeCount++;
}
@Override
public String toString() {
return "Item{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", price=" + price +
", category='" + category + '\'' +
", location='" + location + '\'' +
", publishTime=" + publishTime +
'}';
}
}

@ -1,30 +1,177 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fffaf0" android:orientation="vertical">
<!-- 顶部搜索栏区域 -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFDD59" android:orientation="vertical" android:padding="10dp">
<!-- 搜索框 -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:alpha="0.8" android:background="@drawable/rounded_background1" android:gravity="center_vertical" android:orientation="horizontal" android:padding="8dp">
<!-- 搜索图标 -->
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:alpha="1" android:text="🔍" android:textSize="16sp"/>
<!-- 搜索输入框 -->
<EditText android:id="@+id/search_edit_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:alpha="1" android:background="@null" android:focusable="true" android:focusableInTouchMode="true" android:hint="搜索教材、数码、生活用品..." android:imeOptions="actionSearch" android:inputType="text" android:maxLines="1" android:paddingStart="8dp" android:paddingEnd="8dp" android:singleLine="true" android:textColor="#333333" android:textColorHint="#999999" android:textSize="14sp"/>
<ImageButton android:id="@+id/camera_button" android:layout_width="23dp" android:layout_height="24dp" android:layout_marginStart="4dp" android:background="?android:attr/selectableItemBackgroundBorderless" android:padding="0.5dp" android:scaleType="centerInside" android:src="@android:drawable/ic_menu_camera" android:contentDescription="拍照搜索"/>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fffaf0"
android:orientation="vertical">
<!-- 顶部搜索栏区域 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFDD59"
android:orientation="vertical"
android:padding="10dp">
<!-- 搜索框 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:alpha="0.8"
android:background="@drawable/rounded_background1"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="8dp">
<!-- 搜索图标 -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:alpha="1"
android:text="🔍"
android:textSize="16sp" />
<!-- 搜索输入框 -->
<EditText
android:id="@+id/search_edit_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:alpha="1"
android:background="@null"
android:focusable="true"
android:focusableInTouchMode="true"
android:hint="搜索教材、数码、生活用品..."
android:imeOptions="actionSearch"
android:inputType="text"
android:maxLines="1"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:singleLine="true"
android:textColor="#333333"
android:textColorHint="#999999"
android:textSize="14sp" />
<ImageButton
android:id="@+id/camera_button"
android:layout_width="23dp"
android:layout_height="24dp"
android:layout_marginStart="4dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:padding="0.5dp"
android:scaleType="centerInside"
android:src="@android:drawable/ic_menu_camera"
android:contentDescription="拍照搜索" />
</LinearLayout>
</LinearLayout>
<!-- 导航标签区域 -->
<HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="65dp" android:background="@android:color/white" android:paddingVertical="8dp">
<LinearLayout android:id="@+id/tab_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal">
<!-- 关注标签 -->
<RadioButton android:id="@+id/tab_follow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="关注" android:button="@null" android:textColor="#ff6b35" android:textSize="14sp" android:textStyle="bold" android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true"/>
<!-- 推荐标签 -->
<TextView android:id="@+id/tab_recommend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="推荐" android:textColor="#666666" android:textSize="14sp" android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true"/>
<!-- 新发布标签 -->
<TextView android:id="@+id/tab_new" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="新发布" android:textColor="#666666" android:textSize="14sp" android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true"/>
<!-- 学习资料标签 -->
<TextView android:id="@+id/tab_study" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="学习资料" android:textColor="#666666" android:textSize="14sp" android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true"/>
<!-- 生活用品标签 -->
<TextView android:id="@+id/tab_living" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:paddingBottom="10dp" android:text="生活用品" android:textColor="#666666" android:textSize="14sp" android:background="?attr/selectableItemBackground" android:clickable="true" android:focusable="true"/>
<!-- 导航标签区域 -->
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="65dp"
android:background="@android:color/white"
android:paddingVertical="8dp">
<LinearLayout
android:id="@+id/tab_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- 关注标签 -->
<RadioButton
android:id="@+id/tab_follow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="关注"
android:button="@null"
android:textColor="#ff6b35"
android:textSize="14sp"
android:textStyle="bold"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
<!-- 推荐标签 -->
<TextView
android:id="@+id/tab_recommend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="推荐"
android:textColor="#666666"
android:textSize="14sp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
<!-- 新发布标签 -->
<TextView
android:id="@+id/tab_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="新发布"
android:textColor="#666666"
android:textSize="14sp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
<!-- 学习资料标签 -->
<TextView
android:id="@+id/tab_study"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="学习资料"
android:textColor="#666666"
android:textSize="14sp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
<!-- 生活用品标签 -->
<TextView
android:id="@+id/tab_living"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="生活用品"
android:textColor="#666666"
android:textSize="14sp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true" />
</LinearLayout>
</HorizontalScrollView>
<!-- 首页文字 -->
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/>
<!-- 商品列表区域 - 新增部分 -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewProducts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="120dp"
android:padding="8dp" />
</FrameLayout>
Loading…
Cancel
Save