Android Fragments和findFragmentByTag()

时间:2012-04-03 16:15:41

标签: java android fragment

我有一个带有三个子Tab Fragments的父FragmentActivity。当在FragmentActivity上按下“提交”按钮时,我想要对不同选项卡片段中所有EditText字段的值求和。我认为我有正确的想法,使用getSupportFragmentManager()。findFragmentByTag(),但是我发现它只返回当前活动Fragment的值。我假设我可以访问非活动(或不可见)Tab片段:

int sum1 = getSupplyQuantities(Constants.TAB_TAG1);
int sum2 = getSupplyQuantities(Constants.TAB_TAG2);
int sum3 = getSupplyQuantities(Constants.TAB_TAG3);
int sum4 = getSupplyQuantities(Constants.TAB_TAG4);

private int getSupplyQuantities(String string) {
    Activity tab = getSupportFragmentManager().findFragmentByTag(string)
            .getActivity();

    LinearLayout linearLayout = (LinearLayout) tab
            .findViewById(R.id.get_supplies_layout);

            int sum = 0;

    for (int i = 0; i < linearLayout.getChildCount(); i++) {
        View view = linearLayout.getChildAt(i);

        QuantityTextView quantity = (QuantityTextView) view
                .findViewById(R.id.get_supplies_list_quantity);

        sum += Integer.parseInt(quantity.getText().toString());

    }

    return sum;

}

在上面的场景中,sum1,sum2,sum3和sum4都是相同的。它们将是活动Tab片段的总和。

有没有人有任何想法?

谢谢!

3 个答案:

答案 0 :(得分:2)

正如上面提到的Barak,你需要掌握包含视图的片段。请记住,如果您使用某种视图寻呼机,取决于它的配置方式,只会实例化当前可见的页面/片段。

解决方案:

  1. 如果您没有多个片段,则可以跟踪片段或在缓存中包含视图。
  2. 使用ViewHolder模式“缓存”您需要访问的相关数据。

答案 1 :(得分:1)

我认为您需要获取片段而不是活动的视图。

通过获取您要求活动片段的活动。

答案 2 :(得分:0)

在android示例中有一个关于如何使用带有片段的标签的示例。 只需看看“... \ android-sdk \ samples \ android-15 \”并找到“ApiDemos”示例项目(需要“FragmentTabs.java”文件)。

关于edittexts:您可以将getTextFromEdittext()方法添加到您的片段类中,然后在需要时从FragmentActivity中调用它。