【发布时间】:2012-12-24 07:34:41
【问题描述】:
我正在开发一个应用程序,它有一个“艺术家列表”,一个包含大量乐队、表演者和/或作曲家的列表。它们按流派和相对受欢迎程度排序。
从主要活动您转到一个“乐队列表”活动,其中有两个选项卡。其中之一是“流派”选项卡,其中包含一般音乐流派的列表,当您单击每种流派时,您会被发送到其中也有两个选项卡的相应活动。第一个是“所有”选项卡,另一个是“流行”选项卡。每个选项卡都包含一个片段,其中包含一个过滤的 sqlite 数据库(通过“过滤”,我的意思是我有一个大数据库,它被过滤以在不同的片段中显示我想要的内容,而不是为每个片段/流派使用一个新数据库)。所以现在我有 7 个流派和 14 个类;每种类型有 2 个(“全部”和“流行”)。
我现在想做的是将类的数量减少到只有两个(全部/流行),或者如果可能的话,甚至一个,通过再次过滤数据库为所有列表回收相同的片段。为了做到这一点,我需要从“流派”片段中发送一个字符串,其中包含按下的列表项(流派)的位置到包含“所有”和“流行”选项卡(片段)的活动,然后将该字符串进一步发送到片段,片段将使用它来过滤 sqlite 数据库。
我需要补充一点,我当然已经阅读了有关片段通信的 Android 开发人员指南,但我不知道如何在我的代码中使用他们的方法,因为我创建的片段有点不同,包括没有定义它们在 xml 中,因此我不知道如何使用他们的 getSupportFragmentManager().findFragmentById(R.id.article_fragment); 方法以及更多类似的东西。
这是我创建所有片段的 TabListener:
public class TabListener<T extends Fragment> implements ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
public TabListener(Activity activity, String tag, Class<T> clz) {
mActivity = activity;
mTag = tag;
mClass = clz;
}
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (mFragment == null) {
mFragment = Fragment.instantiate(mActivity, mClass.getName());
ft.add(android.R.id.content, mFragment, mTag);
} else {
ft.attach(mFragment);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
谢谢,
阿列克萨
【问题讨论】:
-
您可以使用开发人员指南中详述的回调方法,并从那里在您的主机活动中设置一个变量。然后你可以让另一个片段从主要活动中读取该变量..
-
这正是我写最后一段的原因...如果我在 xml 中没有指定 id 的
getSupportFragmentManager().findFragmentById(R.id.article_fragment);? -
片段不需要在xml中定义就可以使用回调方法,也不需要片段的id来传递信息。我不明白您为什么需要使用 findFragmentById(),使用回调将信息传递给主机活动,并在实例化新片段时以编程方式检索该信息..
标签: android sqlite list tabs android-fragments