如何让ListView中的每一项点击后打开带有新数据的空白独立Activity
问题原因
你当前的跳转逻辑没有向SecondActivity传递当前点击列表项的对应标识,所有跳转启动的SecondActivity都会默认加载同一份默认数据,所以会出现所有打开的页面内容一致的问题。
解决步骤
1. 跳转时携带列表项的唯一标识参数
在ListView的点击监听逻辑中,拿到当前点击项对应的笔记ID/数据索引,通过Intent的Extra参数传递给SecondActivity。如果你用的是ListView的OnItemClickListener,参考代码如下:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 取当前点击项对应的笔记ID,也可根据你的业务逻辑传数据索引 long currentNoteId = yourNoteDataList.get(position).getId(); Intent i = new Intent(view.getContext(), SecondActivity.class); // 向Intent存入标识参数,新建空白页可传约定的特殊值比如-1 i.putExtra("note_id", currentNoteId); startActivity(i); } });
2. SecondActivity接收参数,加载对应内容
在SecondActivity的onCreate生命周期中接收传递的参数,根据参数值加载对应的数据,或者加载空白页面:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 读取Intent传递的参数,默认值设为约定的空白页标识-1 long targetNoteId = getIntent().getLongExtra("note_id", -1); if (targetNoteId == -1) { // 初始化空白页面逻辑 initEmptyNotePage(); } else { // 根据ID查询对应笔记数据,加载到页面 Note note = yourDatabase.queryNoteById(targetNoteId); renderNoteData(note); } }
注意事项
- Android默认的Activity启动模式是standard,每次启动都会生成新实例,如果你的SecondActivity配置了特殊启动模式,可在跳转时给Intent添加
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)强制生成新实例。 - 传递的标识要和列表绑定的数据一一对应,避免出现位置和数据不匹配的问题。
内容的提问来源于stack exchange,提问作者Hazem
相关产品推荐
相关产品推荐

