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