Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android片段和findFragmentByTag()_Java_Android_Fragment - Fatal编程技术网

Java Android片段和findFragmentByTag()

Java Android片段和findFragmentByTag(),java,android,fragment,Java,Android,Fragment,我有一个父FragmentActivity,它有三个子选项卡片段。当FragmentActivity上按下“提交”按钮时,我想对不同选项卡片段中所有EditText字段的值求和。我想我的想法是正确的,使用getSupportFragmentManager().findFragmentByTag(),但是我发现它只返回当前活动片段的值。我假设我也可以访问非活动(或不可见)选项卡片段: int sum1 = getSupplyQuantities(Constants.TAB_TAG1); int s

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

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;

}
int-sum1=getSupplyQuantilities(Constants.TAB_TAG1);
int sum2=获取供应数量(常数表2);
int sum3=获取供应数量(常数表3);
int sum4=获取供应数量(常数表4);
私有整型GetSupplyQuantilities(字符串){
活动选项卡=getSupportFragmentManager().findFragmentByTag(字符串)
.getActivity();
线性布局线性布局=(线性布局)选项卡
.findviewbyd(R.id.get\u supplies\u布局);
整数和=0;
对于(int i=0;i
在上述场景中,sum1、sum2、sum3和sum4都是相同的。它们将是活动选项卡片段的总和

有人有什么想法吗


谢谢

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


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

正如Barak前面提到的,您需要获取包含视图的片段。请记住,如果您使用某种类型的视图寻呼机(取决于它的配置),则仅实例化当前可见的页面/片段

解决方案:

  • 如果没有太多的片段,可以跟踪片段或在缓存中包含视图
  • 使用ViewHolder模式“缓存”需要访问的相关数据
    在android示例中,有一个关于如何使用带有片段的选项卡的示例。 只要看看“…\android sdk\samples\android-15\”就可以找到“ApiDemos”示例项目(您需要“FragmentTabs.java”文件)


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

    您好,Barak,我尝试使用View tab=getSupportFragmentManager().findFragmentByTag(string.getView();获取片段视图,但我遇到了同样的问题。除活动片段外,每个片段的视图都将为空。我的观点错了吗?对不起,我的知识有限。。。我从来没有用片段做过标签,也没有用片段标签。我认为整个片段视图必须仍然存在(为什么每次在它们之间切换时都要重新创建它们?),但我不知道如何访问它们。嗨,塔姆斯勒,谢谢你的建议。我跟踪了缓存中包含的视图,这很有效。