Die Weitergabe der Daten Von Aktivität zu Fragment wurde unter Verwendung der Schnittstelle
Möchte ich weitergeben von Daten aus Aktivitäten zu bündeln, wurde unter Verwendung der Schnittstelle keine Bündel.
Bitte haben Sie einen Blick auf den folgenden code:
Schnittstelle:
public interface FragmentCommunicator {
public void passData(String name);
}
MainActivity
public class MainActivity extends AppCompatActivity{
FragmentCommunicator fragmentCommunicator;
private Fragment fragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragment= new Fragment();
fragmentCommunicator = (FragmentCommunicator) getApplication();
fragmentCommunicator.passData("hello");
getSupportFragmentManager().beginTransaction().replace(R.id.container ,fragment).commit();
}
});
}
}
Fragment
public class Fragment extends android.support.v4.app.Fragment implements FragmentCommunicator {
FragmentCommunicator communicator;
Context c;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.c = context;
}
@Override
public void passData(String name) {
Toast.makeText(c, name, Toast.LENGTH_SHORT).show();
}
}
Ich möchte nur einige Zeichenfolge, wenn ich auf den button klicken, um zu starten fragment und als fragment gestartet wird, sollte zeigen, den toast mit dem string..
Bitte helfen
jede Hilfe würde geschätzt werden.
- Gewusst wie: übergeben von Aktivität zu fragment - stackoverflow.com/a/9245510/6254066
- Ich sagte, ich möchte die übergabe von Daten unter Verwendung der Schnittstelle nicht durch das bundle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie diese code-Zeile nach der onCreate-Methode.
Sowas
Dann schreiben Sie diese code-Zeile in die onCreateView() des fragments. So etwas
Hinweis: keine Notwendigkeit zu implementieren FragmentCommunicator Schnittstelle in Ihrem fragment. Hoffe, es funktioniert. Es funktioniert für mich. Ich habe getestet
Aktivitäten enthalten Fragmente, sollten Sie nicht brauchen, um passieren alles. Eine Technik zum speichern Ihrer Daten in die scope-Aktivität und erhalten Sie einen Verweis, um es mit getActivity().
Best-practice-Verweis auf die übergeordneten Aktivität des Fragmentes?
So weit als der code, den Sie geschrieben, ich sehe nicht, wo Sie anrufen, Ihre pass-Daten-Methode innerhalb des fragments. Ich würde vorschlagen, fordern Sie in onviewcreated().
Werde ich versuchen, einige Beispiel-code, wie dies zu tun auf meinem mobilen Gerät erweist sich als schwierig.
Versuchen passdata (getActivity ().someStringVariable);
In Ihrem
Fragment
Klasse, eineTAG
Feld. Die Benennung eines fragmentFragment
kann ein wenig verwirrend sein, da es den gleichen Namen wie ein AndroidFragment
, also werde ichExampleFragment
:Nun, wenn Sie ersetzen Sie das fragment in die Aktivität, stellen Sie sicher, pass die
TAG
:Beachten Sie, dass in Ihrem Fall wäre es
Fragment.TAG
, aber ich habeExampleFragment
um zu verdeutlichen, dassFragment.TAG
ist nicht Teil des Android-SDK.Erhalten Sie einen Verweis von Ihrem fragment in Ihrer Aktivität, verwenden Sie die
FragmentManager
finden Sie Ihr fragment:Können Sie dann stellen Sie sicher, dass
myFragment
ist nichtnull
und werfe esFragmentCommunicator
:Beachten Sie, dass in Ihrem Beispiel
fragmentCommunicator = (FragmentCommunicator) getApplication();
ist ungültig, weil es Ihr-fragment, das die Implementierung der Schnittstelle, nicht Ihrer Anwendung.