GetSupportFragmentManager () findFragmentById () gibt null zurück

Ich versuche, Fragment-Kommunikation in Android wie die in der Android-Guide http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity implementieren

Aber meine Anwendung stürzt als getSupportFragmentManager () ab. FindFragmentById () gibt null zurück. Was ist das Problem bei meiner Umsetzung?

  • Warum ein CardView anstelle eines RelativeLayout oder LinearLayout verwenden?
  • Wird diese Methode angerufen? (Immer noch eine akzeptierte Antwort ... Siehe Details in Antwort)
  • Keine generierte R.java-Datei in meinem Projekt
  • Registrieren Sie den Empfänger in einem Dienst
  • Unterschiede zwischen REST und JSON APIs
  • WindowBackground in Android 6 (Marshmallow)
  • Der Code ist unten angegeben:

    Das Programm ist nur, um einen Eingabetext von einem Fragment zu einem anderen Fragment TextView-Bereich durch einen Button-Klick von ersten fragmnet.I haben eine activity_main.xml und zwei Fragment-Layout (zwei separate XML-Dateien anstatt Teil von in activity_main.xml)

    Frag1.java

    public class Frag1 extends Fragment { public Frag1(){ } buttonClickListener buttonListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { buttonListener = (buttonClickListener) getActivity(); } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnButtonPressListener"); } } View myFragmentView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myFragmentView = inflater.inflate(R.layout.frag1, container, false); //SetValue Button Button setValueButton = (Button) myFragmentView.findViewById(R.id.setValueButton); setValueButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { buttonListener.onButtonPressed("Message received"); } }); return myFragmentView; } 

    }

    Frag2.java

     public class Frag2 extends Fragment { View myFragmentView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { myFragmentView = inflater.inflate(R.layout.frag2, container, false); return myFragmentView; } void setMessage(String msg){ TextView txt=(TextView)myFragmentView.findViewById(R.id.textView1); txt.setText(msg); } } 

    ButtonClickListener.java

     public interface buttonClickListener { public void onButtonPressed(String msg); } 

    MainActivity.java

     public class MainActivity extends FragmentActivity implements ActionBar.TabListener, buttonClickListener { SectionsPagerAdapter mSectionsPagerAdapter; @Override public void onButtonPressed(String msg) { // TODO Auto-generated method stub Frag2 fragmentObj=(Frag2) getSupportFragmentManager().findFragmentById(R.layout.frag2); fragmentObj.setMessage(msg); } 

    Bitte sag mir, wo bin ich falsch gelaufen?

    EDIT: Ich benutze Fragment-Erstellung mit der Vorlage von Android Plug-in Eclipse IDE generiert. So werden die Fragmente mit android.support.v4.app.Fragment erstellt

     @Override public Fragment getItem(int position) { Fragment fragment = null; switch(position) { case 0: return new Frag1(); case 1: return new Frag2(); } return fragment; } 

    Die Codebasis wird hier zur Referenz https://skydrive.live.com/redir?resid=D37E0F56FEC9B499!259 aufbewahrt

  • Projekt kann nicht geladen werden: Android Studio
  • ScrollView springt in EditText
  • Android Build fehlgeschlagen mit build.xml: 479: SDK hat keine Build Tools installiert
  • Android: Wie kann ich verhindern, dass das Image in ImageView oder ImageButton skaliert wird?
  • Wie können Sie mehrere primitive Parameter an AsyncTask übergeben?
  • Apps von den letzten Apps, die anstelle des benutzerdefinierten Launcher auf den Launcher zurückgreifen
  • 4 Solutions collect form web for “GetSupportFragmentManager () findFragmentById () gibt null zurück”

    Du solltest das Fragment Frag2 durch Aufruf hinzufügen

     getSupportFragmentManager().beginTransaction().add(R.id.frag2_view, new Frag2(), "tag").commit(); 

    An deiner MainActivity , wo R.id.frag2_view ein Layout ist, das in deinem main_layout definiert ist.

    Um das Fragment zu bekommen, solltest du dann anrufen

     Frag2 obj = (Frag2)getSupportFragmentManager().findFragmentById(R.id.frag2_view); 

    Übergeben der Layout- ID Sie verwendet, um das Fragment in der main_layout hinzuzufügen.

    Ich hoffe es hilft.

    BEARBEITEN:

    Da Sie einen ViewPager verwenden, sollten Sie R.id.pager als ID verwenden. Ich habe gerade mit deinem Beispiel versucht und es hat gearbeitet.

     Frag2 fragmentObj=(Frag2) getSupportFragmentManager().findFragmentById(R.id.pager); 

    EDIT 2:

    Trotz es funktionierte, denke ich nicht wirklich, das ist der richtige Weg, seit R.id.pager seine von ViewPager und du kannst nicht sagen, sagen wir, frag4 oder frag5 .

    Ignoriere meine Antwort bitte. Ich bin nicht sicher, wie das mit ViewPager zu tun, sorry.

    Versuchen Sie, dass es für mich funktioniert Wie man Google Maps V2 auf ein Fragment mit ViewPager setzt

     <fragment android:id="@+id/map" android:layout_width="wrap_content" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap(); 

    Ich hatte ein ähnliches Problem und hier ist die Lösung. Um den Verweis auf das richtige Fragment im Viewpager zu erhalten, ruf einfach an:

     getSupportFragmentManager().findFragmentByTag(tag); 

    Der Tag param können Sie es mit der folgenden Syntax "android:switcher:pager_id:index" : "android:switcher:pager_id:index" , wobei pager_id die ID des ViewPagers im XML-Layout ist und der Index die Position deines Fragments im ViewPager beginnend mit Null. Sehen Sie die ursprüngliche Antwort hier: https://stackoverflow.com/a/7393477/2423274

    Ich habe das benutzt, um ein Kind-Fragment aus einem Fragment-Adapter zu bekommen …

     Fragment parent = MainActivity.this.getSupportFragmentManager().findFragmentById(R.id.main_container); if (parent instanceof PagerFragment) { // do something with parent Fragment child = ((PagerFragment) f).adapter.getItem(childPosition); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.