2016-12-12 5 views
0

Ich möchte Daten von meinem Activity zu einem Fragment übergeben. Ich habe keine Ahnung, wie es geht. Ich habe viele Lösungen gesehen, aber keiner von ihnen hat wirklich funktioniert.Android, wie Daten von Aktivität zu Fragment gesendet werden?

Ich möchte nur eine einfache String an die Fragment übergeben.

Ich habe es auf diese Weise versucht:

public class PhotoActivty extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_photo); 
     if (null == savedInstanceState) { 
      Bundle bundle = new Bundle(); 
      String myMessage = "Stackoverflow is cool!"; 
      bundle.putString("message", myMessage); 
      BasicFragment fragInfo = new BasicFragment(); 
      fragInfo.setArguments(bundle); 
      android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
      transaction.replace(R.id.photo_frame, fragInfo); 
      transaction.commit(); 
     } 
    } 
} 

Was ist der dort Fehler? Ich nenne es so:

String myValue = this.getArguments().getString("message"); 

Im onCreateView im Fragment

+2

Der Code ist in Ordnung. Versuchen Sie, 'if (null == savedInstanceState) zu entfernen {' –

+0

Was ist der Fehler, den Sie hier bekommen, btw? –

+0

Oh ok im Hochformat funktioniert es und in der Landschaft tut es nicht ... aber ich denke, dass dies auf einen anderen Fehler zurückzuführen ist. Danke für deine Hilfe trotzdem! – mafioso

Antwort

0

Nicht sicher, ob dies die eigentliche Ursache des Problems ist, aber Sie haben getSupportFragmentManager() statt getFragmentManager() innerhalb AppCompatActivity zu verwenden. Außerdem sollten Klassen wie und FragmentTransaction aus dem Paket support.v4 kommen.

0
Bundle bundle = new Bundle(); 
String myMessage = "Stackoverflow is cool!"; 
bundle.putString("message", myMessage); 
Fragment fragInfo = new BasicFragment(); 
fragInfo.setArguments(bundle); 
FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(R.id.photo_frame, fragInfo); 
transaction.commit(); 

versuchen Sie dies in Ihrem wenn

0

if (null == savedInstanceState) in Ihrer Aktivität entfernen. Wenn savedInstanceStatenull == null dann BasicFragment wird Ihre FrameLayout für R.id.photo_frame nicht ersetzen.

1

ich in der Regel eine statische Fabrik Muster verwenden:

public class MyFragment extends Fragment { 
    public static MyFragment newInstance(int index) { 
     MyFragment f = new MyFragment(); 
     Bundle args = new Bundle(); 
     args.putInt("index", index); 
     f.setArguments(args); 
     return f; 
    } 
} 

Wenn Sie das Fragment in Ihrer Aktivität zu erstellen:

Fragment MyFragment = MyFragment.newInstance(5); 

Alex Lockwood hat einen guten Überblick darüber, warum dies ist ein bevorzugtes Design-Muster: http://www.androiddesignpatterns.com/2012/05/using-newinstance-to-instantiate.html

1

von Aktivität:

Bundle bundleObject = new Bundle(); 
bundleObject.putString("data", " Send From Activity"); 
/*set Fragmentclass Arguments*/ 
Fragment fragmentobject = new Fragment(); 
fragmentobject .setArguments(bundleObject); 

Von Fragment erhalten Sie auf diese Weise:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
String stringText = getArguments().getString("data");  
return inflater.inflate(R.layout.fragment, container, false); 
Verwandte Themen