如何为ListView特定列表项添加点击跳转至指定Activity的功能
解决ListView特定项跳转指定Activity的问题
没问题,这事儿很好搞定~你目前的代码是不管点击哪个列表项都跳转到MainActivity,要实现特定项对应特定页面的效果,核心就是在onItemClick回调里根据点击的「位置」或者「对应的数据内容」做分支判断,然后启动不同的Intent就行。
下面给你两种常用的实现方式:
方式一:根据点击位置(pos)判断
如果你的列表项位置是固定的(比如第1项跳页面A,第2项跳页面B),直接用pos参数做判断最直接:
listViewProduct.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> list, View v, int pos, long id) { Intent intent; // pos从0开始计数,对应列表的第一项、第二项... switch(pos) { case 0: // 点击第一项跳TargetActivity1 intent = new Intent(DrugaStranica.this, TargetActivity1.class); break; case 1: // 点击第二项跳TargetActivity2 intent = new Intent(DrugaStranica.this, TargetActivity2.class); break; case 3: // 点击第四项跳MainActivity intent = new Intent(DrugaStranica.this, MainActivity.class); break; default: // 其他位置默认跳某个页面,或者不做处理(比如return) intent = new Intent(DrugaStranica.this, DefaultActivity.class); break; } startActivity(intent); } });
方式二:根据点击的数据内容判断(更推荐)
如果你的列表是动态加载的(比如数据排序可能变化),根据绑定的数据项来判断会更灵活,不用关心位置:
假设你的ListView绑定了一个List<Product>数据集合,先获取当前点击的商品对象,再根据它的属性(比如id、名称)判断:
listViewProduct.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> list, View v, int pos, long id) { // 获取当前点击的数据项(替换成你自己的数据类型) Product clickedItem = (Product) list.getItemAtPosition(pos); Intent intent; // 根据数据的标识判断跳转目标 if(clickedItem.getProductId() == 1001) { intent = new Intent(DrugaStranica.this, ProductDetailActivity.class); } else if(clickedItem.getProductName().equals("专属特惠商品")) { intent = new Intent(DrugaStranica.this, SpecialOfferActivity.class); } else { // 默认跳MainActivity intent = new Intent(DrugaStranica.this, MainActivity.class); } // 还可以给Intent传数据,比如把商品id传过去 intent.putExtra("PRODUCT_ID", clickedItem.getProductId()); startActivity(intent); } });
注意事项
别忘了在AndroidManifest.xml里注册所有要跳转的Activity,不然会抛出ActivityNotFoundException哦!
内容的提问来源于stack exchange,提问作者XcombeX
相关产品推荐
相关产品推荐

