Android Activity 回传列表数据

在Android开发中,有时我们需要从一个Activity返回到另一个Activity,并传递一些数据。其中一种常见的需求是返回一个包含多个数据项的列表数据。本文将介绍如何在Android应用程序中实现这个功能,并提供相关的代码示例。

1. 创建数据项类

首先,我们需要创建一个表示列表中每个数据项的类。假设我们的列表数据项包含一个名称和一个值,我们可以创建一个名为 ListItem 的类来表示它们。

public class ListItem {
    private String name;
    private String value;

    public ListItem(String name, String value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public String getValue() {
        return value;
    }
}

2. 创建列表显示的Activity

接下来,我们需要创建一个用于显示列表的Activity。我们称之为 ListActivity。在这个Activity中,我们将使用 RecyclerView 来显示列表数据。

首先,在 res/layout 目录下创建一个名为 activity_list.xml 的布局文件。该布局文件应包含一个 RecyclerView

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerview_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

然后,在 ListActivity 中,我们需要设置 RecyclerView 的适配器并加载数据。

public class ListActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private List<ListItem> items;
    private ListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        recyclerView = findViewById(R.id.recyclerview_list);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        items = new ArrayList<>();
        // 添加示例数据
        items.add(new ListItem("Item 1", "Value 1"));
        items.add(new ListItem("Item 2", "Value 2"));
        items.add(new ListItem("Item 3", "Value 3"));

        adapter = new ListAdapter(items);
        recyclerView.setAdapter(adapter);
    }
}

3. 创建列表项点击事件

现在我们已经完成了显示列表数据的Activity。接下来,我们需要在列表项被点击时返回数据给上一个Activity。

首先,在 ListActivity 中创建一个接口 OnListItemClickListener 来处理列表项的点击事件。

public interface OnListItemClickListener {
    void onItemClick(ListItem item);
}

然后,在 ListAdapter 中添加一个属性 OnListItemClickListener 和一个设置方法。

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
    private List<ListItem> items;
    private OnListItemClickListener listener;

    public ListAdapter(List<ListItem> items) {
        this.items = items;
    }

    public void setOnListItemClickListener(OnListItemClickListener listener) {
        this.listener = listener;
    }

    // ...
}

接下来,我们需要在 ListAdapter.ViewHolder 的构造函数中设置列表项的点击事件。

public class ListAdapter extends RecyclerView.Adapter<ListAdapter.ViewHolder> {
    // ...

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView nameTextView;
        private TextView valueTextView;

        public ViewHolder(View itemView) {
            super(itemView);
            nameTextView = itemView.findViewById(R.id.textview_name);
            valueTextView = itemView.findViewById(R.id.textview_value);
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION && listener != null) {
                listener.onItemClick(items.get(position));
            }
        }
    }

    // ...
}

ListActivity 中,我们需要将 ListActivity 实现 OnListItemClickListener 接口,并在 onItemClick 方法中处理点击事件。

public class ListActivity extends AppCompatActivity implements OnListItemClickListener {
    // ...

    @Override
    public void onItemClick(ListItem item) {
        Intent intent = new Intent();
        intent.putExtra("name", item.getName());
        intent.putExtra("value", item.getValue());
        setResult(RESULT_OK, intent);
        finish();
    }
}

4. 接收返回数据的Activity

现在我们已经完成了在列表项被点击时返回数据给上一个Activity的逻辑。接下来,我们需要在接收返回数据的Activity中显示这些数据。

在上一个Activity中,使用 startActivityForResult() 方法启动 ListActivity

Intent intent = new Intent(this, ListActivity.class);
startActivityForResult(intent, REQUEST_CODE_LIST);

然后,在接收返回数据的Activity中,重写 onActivityResult() 方法以获取返回的数据。

@Override
protected void onActivityResult(int requestCode, int