2016-04-07 8 views
1

Wo tut android Fragment Add wenn ich FragmentTransaction add (Fragment fragment, String tag) nennenfragment mit 0 containerViewId

ich diesen Code geschrieben haben, aber ich kann nicht Fragment Layout sehen. Es zeigt einen leeren Bildschirm an.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Fragment fragment = new TestFragment(); 
     FragmentTransaction ft = getFragmentManager().beginTransaction(); 
     ft.add(fragment, "test"); 
     ft.commit(); 
    } // onCreate 

public class TestFragment extends Fragment { 

     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup  container, Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.frag_layout, container, false); 
     } 
    } // TestFragment 
+0

weil Sie keinen Fragmentcontainer in XML-Layout oder dynamischem Layout definieren ... das ist Grund. dass Sie Fragment in Aktivität nicht gesehen werden –

+0

Zuerst fügen Sie framelayout in Ihrem XML-Code von MainActivity hinzu und übergeben ID.FrameLayout-ID-Container, die das fragment.example enthalten. getSupportFragmentManager(). beginTransaction(). replace (R.id.fragment_container, neu TestFragment()). commit(); –

+0

Ich weiß das. Ich frage nach dieser Methode, es wurde in ProgressDialog – mallaudin

Antwort

5

Sie müssen so ID Layout Ressource angeben, die FragmentTransaction können Ihr Fragment auf diese Ressource (Container) hinzuzufügen.

Wenn Sie FragmentTransaction.add(Fragment, Tag) anrufen rufen Sie tatsächlich FragmentTransaction.add(0,Fragment,Tag) und denken Sie daran "0" ist keine gültige Ressource-ID. So wird Ihr Fragment tatsächlich ohne jede Sicht erstellt.

Es ist möglich, Fragmente, ohne die Sicht zu haben, so dass diese Methode tatsächlich für diese Art von Fragmenten verwendet, die einige Verarbeitung gerade erstellt zu tun, aber haben keine Wechselwirkungen mit Layouts

0

Es fügt das Fragment zum Aktivitätsstatus hinzu.

Aus der Dokumentation - public abstract FragmentTransaction add (Fragment Fragment, String-Tag)

Verfahren über Anrufe - public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)

Diese Methode fügt den Aktivitätszustand ein Fragment. Dieses Fragment kann optional auch seine Ansicht (wenn Fragment.onCreateView nicht null zurückgibt) in eine Containeransicht der Aktivität einfügen.

Referenz - FragmentTransaction

+0

verwendet Ich habe die Frage geändert, bitte schauen Sie – mallaudin

0

u diesen Code verwenden können:

private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 
     case 0: 
      fragment = new HomeFragment(); 
      title = getString(R.string.title_home); 
      break; 
     case 1: 
      fragment = new FriendsFragment(); 
      title = getString(R.string.title_friends); 
      break; 
     case 2: 
      fragment = new MessagesFragment(); 
      title = getString(R.string.title_messages); 
      break; 
     default: 
      break; 
    } 

    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.container_body, fragment); 
     fragmentTransaction.commit(); 

     // set the toolbar title 
     getSupportActionBar().setTitle(title); 
    } 
}