Ich habe zwei Klassen. Die erste ist Aktivität, die zweite ist ein Fragment, in dem ich einige EditText
. In activity habe ich eine Unterklasse mit async-task und in method doInBackground
Ich erhalte ein Ergebnis, das ich in einer Variablen speichere. Wie kann ich diese Variable von der Unterklasse "Meine Aktivität" an dieses Fragment senden?
Antworten
Zu viele Anzeigen?Von Aktivität senden Sie Daten mit der Absicht als:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
und in der Methode Fragment onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
Sie können auch vom Fragment aus auf Aktivitätsdaten zugreifen:
Tätigkeit:
public class MyActivity extends Activity {
private String myString = "hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
...
}
public String getMyData() {
return myString;
}
}
Fragment:
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
MyActivity activity = (MyActivity) getActivity();
String myDataFromActivity = activity.getMyData();
return view;
}
}
Ich habe eine Menge Antworten hier @ stackoverflow.com gefunden, aber definitiv ist dies die richtige Antwort von:
"Senden von Daten von einer Aktivität zu einem Fragment in Android".
Tätigkeit:
Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();
Fragment:
Lesen des Wertes im Fragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
String myValue = bundle.getString("message");
...
...
...
}
oder einfach
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String myValue = this.getArguments().getString("message");
...
...
...
}
Diese Antwort kommt vielleicht zu spät, aber sie wird für künftige Leser nützlich sein.
Ich habe einige Kriterien. Ich habe für die Auswahl der Datei aus Absicht codiert. und ausgewählte Datei zu bestimmten Fragment für den weiteren Prozess übergeben werden. Ich habe viele Fragmente mit der Funktionalität der Datei Kommissionierung. zu der Zeit, jedes Mal die Überprüfung der Bedingung und erhalten das Fragment und den Wert übergeben ist ziemlich ekelhaft. so, ich habe beschlossen, den Wert mit Schnittstelle übergeben.
Schritt 1: Erstellen Sie die Schnittstelle zur Hauptaktivität.
public interface SelectedBundle {
void onBundleSelect(Bundle bundle);
}
Schritt 2: Erstellen des Verweises SelectedBundle auf dieselbe Aktivität
SelectedBundle selectedBundle;
Schritt 3: die Methode in der gleichen Aktivität erstellen
public void setOnBundleSelected(SelectedBundle selectedBundle) {
this.selectedBundle = selectedBundle;
}
Schritt 4: Sie müssen die SelectedBundle-Referenz initialisieren, da alle Fragmente die Filepicker-Funktionalität benötigen, und Sie platzieren diesen Code in Ihrem Fragment onCreateView(..)
Methode
((MainActivity)getActivity()).setOnBundleSelected(new MainActivity.SelectedBundle() {
@Override
public void onBundleSelect(Bundle bundle) {
updateList(bundle);
}
});
Schritt 5: Mein Fall, ich brauche, um das Bild Uri von HomeActivity zu Fragment übergeben. Also, ich verwendet diese Funktionalität auf onActivityResult-Methode.
onActivityResult von der MainActivity, übergeben Sie die Werte an die Fragmente mit Hilfe der Schnittstelle.
Anmerkung: In Ihrem Fall kann das anders sein. Sie können es von jedem beliebigen Ort aus Ihrer HomeActivity aufrufen.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
selectedBundle.onBundleSelect(bundle);
}
Das ist alles. Implementieren Sie jedes Fragment, das Sie benötigen, in die FragmentClass. Du bist großartig. Du hast es geschafft. WOW...
Der beste und bequemste Ansatz ist der Aufruf der Fragment-Instanz und das Senden von Daten zu diesem Zeitpunkt. jedes Fragment hat standardmäßig eine Instanzmethode
Zum Beispiel: Wenn Ihr Fragmentname lautet MyFragment
Sie rufen also Ihr Fragment aus der Aktivität heraus wie folgt auf:
getSupportFragmentManager().beginTransaction().add(R.id.container, MyFragment.newInstance("data1","data2"),"MyFragment").commit();
*R.id.container ist eine id meines FrameLayouts
also in MyFragment.newInstance("Daten1", "Daten2") können Sie Daten an ein Fragment senden und in Ihrem Fragment erhalten Sie diese Daten in MyFragment newInstance(String param1, String param2)
public static MyFragment newInstance(String param1, String param2) {
MyFragment fragment = new MyFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
und dann in onCreate Methode von fragment erhalten Sie die Daten:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
also jetzt mParam1 hat data1 y mParam2 haben data2
jetzt können Sie dies verwenden mParam1 y mParam2 in Ihrem Fragment.
- See previous answers
- Weitere Antworten anzeigen