2013-01-10 58 views
0

我正在研究一个具有“艺术家列表”的应用程序,这是一大批乐队,表演者和/或作曲家的列表。他们按流派和相对流行度排序。
从主要活动中,您转到一个“乐队列表”活动,其中有两个选项卡。其中之一是一个“流派”选项卡,其中包含一般音乐流派的列表,当您点击每个流派时,您将发送到各自的活动,该活动也包含两个标签。第一个是“全部”选项卡,另一个是“热门”选项卡。每个选项卡包含一个片段,其中包含一个过滤的sqlite数据库(通过“过滤”我的意思是我有一个大型数据库过滤,以显示我想要在不同的片段,而不是使用每个片段/流派的新数据库)。所以现在我有7个流派和14个班级; 2(“全部”和“流行”)。
现在我想要做的是通过再次过滤数据库,将所有列表的相同片段再循环,从而将类的数量减少到只有两个(全部/受欢迎),或者如果可能的话,甚至是一个。为了做到这一点,我需要从“流派”片段发送一个字符串,其中包含按下列表项目(流派)的位置到包含“全部”和“热门”标签(片段)的活动,然后进一步发送该字符串到片段,这将使用它来过滤sqlite数据库。跨分段通信

我需要补充的是,我有,当然,阅读Android开发者指南片段通信,但我不知道如何在我的代码中使用他们的方法,因为我创建了片段有点不同,包括不在xml中定义它们,因此我不知道如何使用它们的方法以及其他更多的东西。

这里是通过它我创建的所有片段的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) { 
    } 
} 

感谢,
Aleksa

+0

您可以使用开发人员指南中详细介绍的回调方法,并从此处在主机活动中设置一个变量。然后你可以让其他片段从主活动读取该变量.. –

+0

这正是我写了最后一段的原因......如何使用'getSupportFragmentManager()。findFragmentById(R.id.article_fragment);'如果我在xml中我没有指定id的 murtaugh

+0

片段不需要在xml中定义以使用回调方法,并且您不需要片段的ID来传递信息。我不明白为什么你需要使用findFragmentById(),使用回调函数将信息传递给主机活动,并在实例化新片段时以编程方式检索该信息。 –

回答

0

经过一番尝试后,我最终放弃了setArguments()和getArguments(),并在父活动中使用了它:
public int getPosition(){ return position; }
...这在孩子的片段:
position=((ParentActivity) getActivity()).getPosition();
我不知道这是否是身边最有效的方法,但它的伟大工程,使一些简单的数据发送到一个片段为一件小事新来者像我一样,应该是。 :)

0

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

+0

感谢您的回复! 我目前通过添加一个额外的我的意图没有问题,但是当我尝试通过使用setArguments()和getArguments()从该活动发送数据到其子片段的流派片段的数据,这一行中的nullpointerexception(在片段中)'genre = getArguments()。getInt(“position”);'。有小费吗? – murtaugh