2012-04-03 31 views
1

私は親FragmentActivityに3つの子タブフラグメントを持っています。 FragmentActivityで "Submit"ボタンを押すと、別のTab FragmentのすべてのEditTextフィールドの値を合計します。 getSupportFragmentManager()。findFragmentByTag()を使用して正しいアイデアがあると思いますが、現在のアクティブなフラグメントの値を返すだけです。上記のシナリオ、SUM1、SUM2、SUM3でAndroid Fragmentsと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; 

} 

、およびsum4はすべて同じになります。私は、タブ断片のは、同様に、私は(目に見えるかどうか)、非アクティブにアクセスできるという仮定の下にありました。アクティブなタブフラグメントの合計になります。

誰にもアイデアはありますか?

ありがとうございます!

答えて

2

上記のBarakと同様に、ビューを含むフラグメントを保持する必要があります。ある種類のビューページャを使用する場合、設定されている方法に応じて、現在表示されているページ/フラグメントのみがインスタンス化されます。

ソリューション:

  1. あなたは多くの破片を持っていない場合は、キャッシュ内のフラグメントまたはビューを含むを追跡することができます。
  2. ViewHolderパターンを使用して、アクセスする必要のある関連データを「キャッシュ」します。
+0

こんにちはtamsler、アドバイスをいただきありがとうございます。私は、キャッシュに含まれているビューを追跡し、それが機能しました。 – littleK

1

私はあなたがそのアクティビティではなくフラグメントのビューを取得する必要があると思います。

アクティビティを取得することで、アクティブなフラグメントを要求します。

+0

こんにちはBarak、私はビューのタブ= getSupportFragmentManager()を使用してみました。findFragmentByTag(文字列).getView();フラグメントビューを取得するには、同じ問題が発生しています。ビューは、アクティブなものを除くすべてのフラグメントに対してnullになります。私はビューが間違っていますか? – littleK

+0

申し訳ありませんが、私は私の知識の限界に挑戦しています...私はフラグメントでタブを作ったことがなく、フラグメントにもタグを使用していません。私は全体的なフラグメントビューがまだ周りにある必要があると思うでしょう(あなたがそれらの間を切り替えるたびにそれらを再作成するのはなぜですか?)が、私はあなたがそれらにアクセスする方法を知りません。 – Barak

0

アンドロイドサンプルでは、​​フラグメントでタブを使用する方法の例があります。 "... \ android-sdk \ samples \ android-15 \"を見て、 "ApiDemos"サンプルプロジェクト( "FragmentTabs.java"ファイルが必要です)を探してください。

edittextについて:フラグメントクラスにgetTextFromEdittext()メソッドを追加し、必要に応じてFragmentActivityから呼び出すことができます。

関連する問題