0

我正在开发一个应用程序,它有一个“艺术家列表”,一个包含大量乐队、表演者和/或作曲家的列表。它们按流派和相对受欢迎程度排序。
从主要活动您转到一个“乐队列表”活动,其中有两个选项卡。其中一个是“流派”选项卡,其中包含一般音乐流派的列表,当您单击每种流派时,您会被发送到其中也有两个选项卡的相应活动。第一个是“所有”选项卡,另一个是“流行”选项卡。每个选项卡都包含一个片段,其中包含一个过滤的 sqlite 数据库(“过滤”是指我有一个大数据库,它被过滤以在不同的片段中显示我想要的内容,而不是为每个片段/流派使用一个新数据库)。所以现在我有 7 个流派和 14 个类;
我现在想做的是将类的数量减少到只有两个(全部/流行),或者如果可能的话,甚至一个,通过再次过滤数据库为所有列表回收相同的片段。为了做到这一点,我需要从“流派”片段中发送一个字符串,其中包含按下的列表项(流派)的位置到包含“所有”和“流行”选项卡(片段)的活动,然后将该字符串进一步发送到片段,片段将使用它来过滤 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) {
    }
}

谢谢,
阿莱克萨

4

2 回答 2

0

如果您以编程方式创建片段并使用标签添加它们,您可以使用支持 FragmentManager 方法:findFragmentByTag(String tag)

于 2013-01-10T02:19:16.950 回答
0

经过更多尝试后,我最终放弃了 setArguments() 和 getArguments() 并在父活动中使用了它:
public int getPosition(){ return position; }
......在子片段中使用了这个:
position=((ParentActivity) getActivity()).getPosition();
我不知道它是否是最有效的方法,但它有效很棒,并且对于像我这样的新手来说,将一些简单的数据发送到片段中是一件微不足道的事情。:)

于 2013-01-10T23:27:30.783 回答