Android:如何使按钮指向ListView项目详细信息(在不同的活动中)(主/详细流)
我是Android开发的初学者。Android:如何使按钮指向ListView项目详细信息(在不同的活动中)(主/详细流),android,listview,button,android-button,Android,Listview,Button,Android Button,我是Android开发的初学者。 我知道,这个标题似乎很难理解,但请让我解释一下 我的应用程序是我所在城市的公交线路指南,它包含两个不同的视图: 一个列表视图,所有总线都以数字、简单顺序排列,没有任何内容 特别的。它正好包含100个项目 另一个活动中的NavigationDrawer,具有相同的行,但由区域(北、南、东、东南)分隔 每个NavigationDrawer菜单都会指向一个包含多个按钮和总线线路的活动,但仅限于属于X区的按钮和总线线路(例如,东部) 这里是ActivityEast的
我知道,这个标题似乎很难理解,但请让我解释一下 我的应用程序是我所在城市的公交线路指南,它包含两个不同的视图:
- 一个
,所有总线都以数字、简单顺序排列,没有任何内容 特别的。它正好包含100个项目李>列表视图
- 另一个活动中的
,具有相同的行,但由区域(北、南、东、东南)分隔NavigationDrawer
NavigationDrawer
菜单都会指向一个包含多个按钮和总线线路的活动,但仅限于属于X区的按钮和总线线路(例如,东部)
这里是ActivityEast的布局:
因此,基本上,您需要与区域活动(即
ActivityEast
)共享LinhaListFragment
中的适配器信息。问题是在LinhaListFragment
中有一个适配器
,因为您使用的是列表片段
,但在活动东部
中,您有一个线性布局
,有一堆按钮
,那么我们如何将这两件事映射到一起工作呢
第一个解决方案(黑客和肮脏)
在您的DummyContent
类中,当您添加项目时,还要添加对按钮的引用
id:
static {
addItem(new DummyItem(R.id.idbotao_l_001, "1", "004 - LINE NAME", "Line 004 Details"));
addItem(new DummyItem(R.id.idbotao_l_002, "2", "005 - LINE NAME", "Line 005 Details"));
addItem(new DummyItem(R.id.idbotao_l_033, "33", "033 - LINE NAME", "Details"));
addItem(new DummyItem(R.id.idbotao_l_100, "100", "100 - LINE NAME", "Line 100 Details"));
}
然后单击每个按钮,您可以执行以下操作:
@Override
public void onClick(View view) {
for (DummyItem item : DummyContents.ITEMS) {
if (item.resourceId == view.getId()) {
//Start the item detail activity
break;
}
}
}
我不知道您是否正在使用DummyContent
类,因为如果您正在使用它,您的内容永远不会改变,因为您只是在测试代码。如果将来您要从Web服务获取这些数据,那么这个解决方案是无用的
第二种溶液(清洁)
首先,如果你真的想遵循主/细节规范,那么你应该只使用活动作为片段持有者,因此像ActivityEast
这样的区域活动不应该存在,你也不应该有一个带有一串按钮的LinearLayout
。将其替换为ZoneActivity
,其中包含ZoneFragment
,并使用RecyclerView
(没有人再使用ListView
或ListFragment
)RecyclerView
应使用与启动ZoneActivity
时在LinhaListFragment
中使用的相同的Adapter
设置,要求通过Intent
的捆绑包发送区域id,该id通过ZoneFragment
并最终设置为适配器
。适配器
包含过滤/显示每个区域的行的逻辑。zone id参数不应该是必需的,因为ListFragment
也将使用相同的适配器,并且没有区域id
既然你说你刚刚开始安卓系统开发,有一些技巧可以帮助你:
- 不要使用
而是使用列表视图
回收视图
- 永远不要像在ActivityEast中那样做,如果你要有这么多按钮,即使你的数据是静态的,也要使用
RecyclerView
- 没有人再使用类似于
的东西了。如果您从附加到该类的类似内容进行扩展,请尝试从您自己的基类或非常基本的基类(如Fragment和Activity)继承HListFragment
- 尝试使用没有单独代码的区域。例如:
//region Variables
private int myField;
//endregion
//region Fragment lifecycle
protected void onCreate(Bundle saveInstance) {
//...
}
//endregion
}
然后,您可以将它们折叠起来,以更方便的方式阅读代码
- 切勿明确启动活动,例如:
}谢谢你的回答!!!!有很多内容,所以我现在就开始搜索。对我来说还是有点困难,但我不会放弃。关于这个按钮,这是我找到的第一个简单的解决方案,现在我知道该怎么做了。提前谢谢。第二个解决方案看起来很好,很干净,正如你所说,我会尝试这个答案帮助你,如果你对答案感到满意,请接受它。好的,tzz,它帮助很大,如果你能解释erm。。。第二个。。。我很高兴。是的,别担心,给我几分钟时间,我会更新答案。请别担心,我已经转到了RecyclerView。我制作了一个非常漂亮的列表,但是现在我在OnClickListener上遇到了问题,我不能为每张卡单独设置它。堆栈溢出没有一个对我有帮助。。。。
Intent intent = new Intent(context, MyActivity.class);
intent.putExtra("zoneId",myZoneId);
startActivity(intent);
startActivity(MyActivity.getStartIntent(context, myZoneId));
....
//In MyActivity class
public static getStartIntent(Context context, int zoneId) {
Intent intent = new Intent(context, MyActivity.class);
intent.putExtra(MyActiviy.ZONE_ID, zoneId);
return zoneId;
}