Android:如何使按钮指向ListView项目详细信息(在不同的活动中)(主/详细流)

Android:如何使按钮指向ListView项目详细信息(在不同的活动中)(主/详细流),android,listview,button,android-button,Android,Listview,Button,Android Button,我是Android开发的初学者。 我知道,这个标题似乎很难理解,但请让我解释一下 我的应用程序是我所在城市的公交线路指南,它包含两个不同的视图: 一个列表视图,所有总线都以数字、简单顺序排列,没有任何内容 特别的。它正好包含100个项目 另一个活动中的NavigationDrawer,具有相同的行,但由区域(北、南、东、东南)分隔 每个NavigationDrawer菜单都会指向一个包含多个按钮和总线线路的活动,但仅限于属于X区的按钮和总线线路(例如,东部) 这里是ActivityEast的

我是Android开发的初学者。
我知道,这个标题似乎很难理解,但请让我解释一下

我的应用程序是我所在城市的公交线路指南,它包含两个不同的视图:

  • 一个
    列表视图
    ,所有总线都以数字、简单顺序排列,没有任何内容 特别的。它正好包含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

  • 没有人再使用类似于
    ListFragment
    的东西了。如果您从附加到该类的类似内容进行扩展,请尝试从您自己的基类或非常基本的基类(如Fragment和Activity)继承H

  • 尝试使用没有单独代码的区域。例如:

公共类MyFragment扩展了Fragment{

//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;
}