从TabHost片段中更新BadgeView

时间:2014-11-17 21:42:47

标签: android android-fragments badge

我在一个活动中有一个Tabhost,它在每个标签中托管片段。片段有一个列表视图,其中填充了一些元素。

每个标签都有一个徽章,它反映了片段中列表中的项目数。我正在使用库Badge Library中的徽章。现在,列表中的项目可能会根据操作进行更改(例如删除或添加)。

我希望每个标签的徽章都会在其列表中的每次插入或删除时更新。每次使用以下代码在列表中进行更新时,我都尝试添加新的徽章: -

TabWidget tabs = (TabWidget)  getActivity().findViewById(android.R.id.tabs);

BadgeView allBadge = new BadgeView(getActivity(), tabs, 2);
BadgeView learntBadge = new BadgeView(getActivity(), tabs, 1);
BadgeView newBadge = new BadgeView(getActivity(), tabs, 0);

allBadge.setText(String.valueOf(allWords.getCount()));
learntBadge.setText(String.valueOf(learntWords.getCount()));
newBadge.setText(String.valueOf(newWords.getCount()));
allBadge.toggle();
learntBadge.toggle();
newBadge.toggle();

但是这没用。任何猜测我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

TabHost选项卡上显示的徽章视图可以成为Tab主机所属的活动的类成员。 Activity类可以有一个更新成员函数,该函数将Badge Views显示的文本作为输入,并使用函数输入更新这些BadgeViews显示的文本。 在Fragment端,片段可以通过getActivity获取父活动的句柄,并调用活动的update成员函数,同时传递要在Badge View上显示的新值。

将BadgeViews添加到活动

void addBadges()
{
    TabWidget tabs = (TabWidget) findViewById(android.R.id.tabs);
    Badge1 = new BadgeView(this, tabs, 2);
    Badge2 = new BadgeView(this, tabs, 1);
    Badge3 = new BadgeView(this, tabs, 0); 
}

更新活动中的BadgeViews的功能

public void UpdateBadgeView( String newString1, String newString2, String newString3 )
{
    Badge1.setText(newString1);
    Badge2.setText(newString2);
    Badge3.setText(newString3);
}

从Fragment

更新BadgeViews的调用
((MyActivityClass) getActivity()).UpdateBadgeView( text1, text2, text3 );