2

FragmentTabHost가있는 MainActivity (FragmentActivity)가 있습니다.탭간에 데이터 전달

public class FragmentTabs extends FragmentActivity { 
    private FragmentTabHost mTabHost; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_tabs); 
     mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

     mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"), 
      ClassA.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("classB").setIndicator("Class B"), 
      ClassB.class, null); 
     mTabHost.addTab(mTabHost.newTabSpec("classC").setIndicator("Class C"), 
      ClassC.class, null); 
    } 
} 

를 ClassA, ClassB가 ClassC과 모든 파편 (android.support.v4.app.Fragment).

I은 ​​프래그먼트 데이터 (및 통화 방법)을 통과해야

이다. 내가 getSupportFragmentManager().findFragmentByTag()를 사용 해봤

ClassA mClassAFragment = ???; 

와 나는 또한 mTabHost의 기능을 탐험 시도했다 : 어떻게이처럼 조각의 각각의 참조를 얻을 수 있습니다. 아무것도 얻을 수 없습니다.

이 방법을 제안하거나 다른 방법을 제안 할 수 있습니까?

그리고 난이 사용 시도 ...

Bundle arguments = new Bundle(); 
arguments.putString("some id string", "your data"); 
YourFragment fragment = new YourFragment(); 
fragment.setArguments(arguments); 
getSupportFragmentManager().beginTransaction().add(R.id.fragmentid, fragment).commit(); 

하지만 난 내 추가 탭이 잘 경우이 R.id.fragmentid을 사용하는 방법을 잘 모릅니다 :

mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"), 
       ClassA.class, null); 

누구든지 나를 도와?

답변

1

활동에있는 조각을 공개로 정의하십시오. 그런 다음 각 단편에서 활동을 참조하십시오. 당신의 활동에

:

public ClassAFragment aFragment; 
... 
// during initialization: 
aFragment = new ClassAFragment(); 
// or you get it from your TabHost 
FragmentManager fm = getFragmentManager(); 
aFragment = fm.findFragmentByTag("ClassA"); 
aFragment.mActivity = this; 
// same with B and C 

당신의 조각에서 :

public MainActivity mActivity; 
... 
// in Fragment C 
String newText = mActivity.aFragment.editText.getText().toString() + mActivity.bFragment.editText.getText().toString(); 
textView.setText(newText); 
+0

당신은 나에게 예를 보일 수 있는가? TAB2에서 우리가 3 개 조각이 있다고 가정합니다 .. 탭 1 ==> FragmentTab1 탭 2 ==> FragmentTab2 탭 3 == TAB1에서> FragmentTab3 당신이 글고이 "번호 1" 당신은 글고 "번호가 2 " Tab3에 두 숫자의 합계가 표시되어야합니다 그렇게 하시겠습니까? – Roldanhollow

+0

나는 두 조각의 editText를 연결 한 문자열로 Fragment C에 textView를 채우는 예제를 업데이트했다. – Christian

+0

사용 해봤습니다 FragmentManager fm = getFragmentManager(); aFragment = fm.findFragmentByTag ("ClassA"); aFragment.mActivity = this; 하지만 작동하지 않습니다 .... aFragment null입니다 ... 어떻게 초기화 할 수 있습니까? – Roldanhollow