Android开发:双Activity实现自定义列表视图与SQLite数据处理问题咨询
嘿,我来帮你搞定这个双Activity实现自定义列表添加与展示的需求!下面是完整的可落地实现方案:
完整实现方案:自定义列表的添加与跨Activity展示
1. 第一步:定义数据模型类
首先得有一个实体类来封装你的图片+两个字符串数据,推荐用Parcelable(比Serializable效率更高):
public class CustomItem implements Parcelable { // 本地图片用资源ID,网络图片可换成String类型的URL private int imageResId; private String textFirst; private String textSecond; public CustomItem(int imageResId, String textFirst, String textSecond) { this.imageResId = imageResId; this.textFirst = textFirst; this.textSecond = textSecond; } // Parcelable 必要实现 protected CustomItem(Parcel in) { imageResId = in.readInt(); textFirst = in.readString(); textSecond = in.readString(); } public static final Creator<CustomItem> CREATOR = new Creator<CustomItem>() { @Override public CustomItem createFromParcel(Parcel in) { return new CustomItem(in); } @Override public CustomItem[] newArray(int size) { return new CustomItem[size]; } }; // Getter方法 public int getImageResId() { return imageResId; } public String getTextFirst() { return textFirst; } public String getTextSecond() { return textSecond; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(imageResId); dest.writeString(textFirst); dest.writeString(textSecond); } }
2. MainActivity:添加数据并跳转至展示页
在MainActivity里完成数据添加,然后通过Intent把数据传递给Activity_4:
public class MainActivity extends AppCompatActivity { private ArrayList<CustomItem> itemList = new ArrayList<>(); // 假设你通过按钮点击触发添加+跳转逻辑 public void addItemsAndJump(View view) { // 添加示例数据(你可以替换成用户输入的内容) itemList.add(new CustomItem(R.drawable.ic_launcher, "标题1", "描述文本1")); itemList.add(new CustomItem(R.drawable.ic_launcher_round, "标题2", "描述文本2")); // 跳转并传递数据 Intent intent = new Intent(this, Activity_4.class); intent.putParcelableArrayListExtra("CUSTOM_ITEM_LIST", itemList); startActivity(intent); } }
3. 补全Activity_4:接收数据并展示列表
把你给出的Activity_4代码补全,实现自定义适配器并绑定数据:
public class Activity_4 extends AppCompatActivity { ListView listView; myAdapter mAdapter = null; // 把Object换成具体的CustomItem类型,类型更安全 ArrayList<CustomItem> objectList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_4); listView = findViewById(R.id.listView4); // 接收从MainActivity传来的数据 objectList = getIntent().getParcelableArrayListExtra("CUSTOM_ITEM_LIST"); // 初始化适配器并绑定到ListView mAdapter = new myAdapter(this, objectList); listView.setAdapter(mAdapter); } // 自定义适配器(内部类实现,也可以单独成文件) private class myAdapter extends BaseAdapter { private Context mContext; private ArrayList<CustomItem> mItemList; public myAdapter(Context context, ArrayList<CustomItem> itemList) { this.mContext = context; this.mItemList = itemList; } @Override public int getCount() { return mItemList.size(); } @Override public Object getItem(int position) { return mItemList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; // 复用View优化性能 if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_custom, parent, false); holder = new ViewHolder(); holder.itemImage = convertView.findViewById(R.id.item_image); holder.itemText1 = convertView.findViewById(R.id.item_text_first); holder.itemText2 = convertView.findViewById(R.id.item_text_second); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // 绑定数据到布局 CustomItem item = mItemList.get(position); holder.itemImage.setImageResource(item.getImageResId()); holder.itemText1.setText(item.getTextFirst()); holder.itemText2.setText(item.getTextSecond()); return convertView; } // ViewHolder 优化列表滚动性能 private class ViewHolder { ImageView itemImage; TextView itemText1; TextView itemText2; } } }
4. 创建自定义列表项布局(list_item_custom.xml)
在res/layout下创建这个布局,用来展示图片和两个文本:
<?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="16dp" android:gap="12dp"> <ImageView android:id="@+id/item_image" android:layout_width="60dp" android:layout_height="60dp" android:scaleType="centerCrop"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gap="8dp"> <TextView android:id="@+id/item_text_first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:textStyle="bold"/> <TextView android:id="@+id/item_text_second" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" android:textColor="@android:color/darker_gray"/> </LinearLayout> </LinearLayout>
额外注意事项
- 如果是加载网络图片,把
CustomItem里的imageResId换成String imageUrl,然后用Glide/Picasso等图片加载库加载,避免内存溢出。 - 推荐用
RecyclerView替代ListView,性能更好且支持更多布局样式,不过上面的ListView代码可以正常运行。 - 别忘了在
AndroidManifest.xml里注册Activity_4,否则会跳转失败。
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

