Replacing TabActivity with FragmentActivity and Fragments

Since TabActivity is deprecated, I need to find a way to do this with fragments. I worked with Fragments before I know how this works, but I need a guide to create my tab node using FragmentActivities. I found several examples on the Internet, and they all relate to placing snippets in a tab container.

I want to add FragmentActivities for each tab. Because in my application I will use 4 tabs, and each tab has really complex content in it. As a result, I need to have a FragmentActivity for each tab to manage the fragments, which I will put under each tab in a separate container.

DECISION:

After answering and searching the Internet, I finished the solution. According to the found solution, I track fragments in a separate stack for each tab under the tab node. Here is my GitHub repository, I created a small sample application for this problem.

+5
source share
2 answers

Since TabActivity is deprecated, I need to find a way to do this with fragments.

If you do not want to use TabActivity- forget about putting FragmentActivitiestabs in the contents.

I remind you that you can use TabWidgetwithout TabActivity. So you can try this solution:

  • Create only one FragmentActivity.
  • TabWidget FragmentActivity. TabWidget= 0.
  • TabWidget XML Fragment (FrameLayout ).
  • FragmentActivity (TabHost.OnTabChangeListener) Fragment .
  • ( ) .

FragmentActivity TabWidget, Fragment Fragment .

, 3 3 , , . showFragmentX, .

public class Test extends FragmentActivity {

private Fragment1 fragment1=new Fragment1();
private Fragment2 fragment2=new Fragment2();
private Fragment3 fragment3=new Fragment3();

private void showFragment1(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment1);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

private void showFragment2(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment2);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

private void showFragment3(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment3);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.fragmentactivity_layout);
}
}

, fragmentX , fragment_container. , FragmentActivity . . OnCreateView onDestroyView , replace .

onSaveInstanceState, . : 1 editText. ( ), ,

1.save name string 1 onSaveInstanceState
2. 1 OnCreateView savedInstanceState bundle, null - edittext , .

public class Fragment1 extends Fragment {

EditText nameEditText;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View fragment1View=inflater.inflate(R.layout.fragment1_layout, container, false);
    nameEditText=(EditText) fragment1View.findViewById(R.id.edittext_name);

    //check for saved data. if it is not null - fill your edittext with saved string
    if(savedInstanceState!=null){
        String nameString=(String) savedInstanceState.get("nameString");
        nameEditText.setText(nameString);
    }
    return fragment1View;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //save data that user have entered
    outState.putString("nameString", nameEditText.getText().toString());
}

}

. , .

, setRetainInstance(true) onCreateView() Fragment - ( ).

+9

, . , .

- ActionBar Tab TabHost.

+1

All Articles