从片段中更改选项卡的文本

时间:2013-03-05 11:37:29

标签: android actionbarsherlock

我试图做一些非常简单的事情。我有两个标签,一个显示有关狗品种的信息,另一个显示人们撰写的描述该品种的评论列表。我想包括在Tab中写的评论数量,所以它看起来像这样:

品种信息|评论(19)

问题是我需要首先下载所述评论数据,以便查看标签上的评论数量。

所以我认为解决方案是先在我的BreedProfile.java(ShelockActivity)中添加标签

ActionBar.Tab reviewTab= ab.newTab();
reviewTab.setText("Reviews");
mTabsAdapter.addTab(reviewTab, DogReviewFragment.class, null);

然后在我的BreedProfileReviewFragment.java中,我会下载评论,然后通过这样做更新reviewTab文本:

getActivity().getActionBar().getTabAt(1).setText("Reviews 10");

但是,根据LogCat,上述方法不存在。

03-05 18:15:26.460: E/AndroidRuntime(1286): FATAL EXCEPTION: main
03-05 18:15:26.460: E/AndroidRuntime(1286): java.lang.NoSuchMethodError: android.support.v4.app.FragmentActivity.getActionBar

所以我的问题是,是否可以从FRAGMENT访问TAB以在添加后改变TAB的TEXT属性?如果是,我怎么能实现呢?

注意:

  1. 我无法将评论与品种信息一起下载,因为API是独立的。

  2. BreedProfile.java来自ListActivity BreedList.java中的品种列表。

1 个答案:

答案 0 :(得分:2)

您可以实施Interface。所以你可以在片段的父活动中运行代码。

在您的片段中创建您的界面,如下所示:。

public interface OnQuestionSelectedListener {
 void onQuestionSelected(int Position, boolean isFirstTime);
}

在您的父活动方面实施,如下所示:

public class YourParentActivity extends Activity implements YourFragment.OnQuestionSelectedListener{
       @Override
    public void onQuestionSelected(int position, boolean isFirstTime) {
        // your code.
         }
}

从您的片段中调用它,如下所示:

((YourParentActivityName)getActivity()).onQuestionSelected(position, true);

(您可以根据需要对代码进行更改)
将所有片段逻辑转移到其父级是一种非常好的做法,因为我认为片段用于UI部分,而Interface为我们提供了将片段消息传递给父级的好方法。父母的活动,并将结果转移到相应的片段。

希望这会有所帮助。