Wyobraź sobie, mam FragmentA, z którego I startDialogFragment (w pudełku jest EditText
). Jak mogę odzyskać wartość z EditText
do FragmentA? Próbuję zrobić coś takiego, jak this i this, ale mi się nie udało.Jak pobrać dane z DialogFragment do fragmentu?
Odpowiedz
Metoda Fragment.onActivityResult()
jest przydatna w tej sytuacji. Zajmuje getTargetRequestCode()
, który jest kodem ustawionym między fragmentami, aby można go było zidentyfikować. Ponadto wykonuje kod żądania, zwykle tylko 0
jeśli kod działa dobrze, a potem Intent
, który można dołączyć ciąg też, tak jak
Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);
Również setTargetFragment(Fragment, requestCode)
powinien być stosowany we fragmencie że wynik jest wysyłany, aby go zidentyfikować. Ogólnie rzecz biorąc, masz kod w wzywającego fragmentu, który wygląda tak:
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();
klasę, do przesyłania danych (DialogFragment) użyłby tego fragmentu po prostu zdefiniowane, aby wysłać dane:
private void sendResult(int REQUEST_CODE) {
Intent intent = new Intent();
intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
getTargetFragment().onActivityResult(
getTargetRequestCode(), REQUEST_CODE, intent);
}
aby otrzymać dane, używamy tego typu klasy we fragmencie, który początkowo rozpoczął DialogFragment:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Make sure fragment codes match up
if (requestCode == DialogFragment.REQUEST_CODE) {
String editTextString = data.getStringExtra(
DialogFragment.EDIT_TEXT_BUNDLE_KEY);
w tym momencie masz ciąg z Twojego EditText
od DialogFragment
w części macierzystej. Po prostu użyj metody anonimowej sendResult(int)
w klasie anonimowej, aby tekst był wysyłany, gdy jej potrzebujesz.
Dziękuję, jest bardzo przydatna –
Bardzo dobra ekspenacja. Uratowałeś mi dzień. Wielkie dzięki! – Kristopher
Witam i dziękuję za to rozwiązanie ... Czy możesz mi pomóc? Dlaczego moja metoda onActivityResult() nie może przechwycić wyniku z mojego fragmentu okna dialogowego? Kiedy mam ten sam kod ... Z góry dziękuję! –
Musisz wysłać dane z okna dialogowego z powrotem do działania za pomocą metody wywołania zwrotnego, a następnie zlecić dane z powrotem do fragmentu, do którego ma ono trafić. Szybki przykład:
public void datFromDialog(String data){
MyFragment mf = (MyFragment)getFragmentManager().findFragmentById(r.id.frag);
mf.iWantNewData(data);
}
Proszę, czy możesz wyjaśnić to bardziej lub uzyskać pełniejszą wersję –
zobacz tutaj http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – tyczj
Potrzebuję Komunikując się z fragmentem zamiast działania –
Co chcesz, według Android Developers ...
Załóżmy sytuację, że przesyłasz jakiś plik do serwera, na kliknięcie przycisku Prześlij dialogowe należy otworzyć, co skłoniło do tytułu i opcjonalnym tag.And oknie dialogowym sam zawiera 2 przyciski: anuluj i kontynuuj.
utworzyć interfejs użytkownika, korzystając z pliku układu xml.
następnie utwórz jedną klasę rozszerzającą DialogFragment. nadpisać układ i zainicjować widoki wewnątrz metody onCreateView().
Wewnątrz tej klasy utworzyć jeden interfejs
public interface uploadDialogInterface
{
public void senddata(String title, String tag);
}
uploadDialogInterface interfaceObj;
String title="";
String tag=" ";
A najważniejsze jest to, czego potrzebujesz, aby zastąpić onAttach metoda()
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
interfaceObj= (uploadDialogInterface) getTargetFragment();
}
A w dniu kliknięcia przycisku wywołać metodę interfejsu jak
@Override
public void onClick(View v) {
int id=v.getId();
if(id== R.id.vB_fud_cancel)
{
dismiss();
}
else if(id== R.id.vB_fud_upload)
{
title=mVideotitle.getText().toString();
tag=mOptionaltag.getText().toString();
if(mVideotitle.getText().toString().isEmpty()) {
Snackbar.make(mVideotitle,"Please enter the video title", Snackbar.LENGTH_SHORT).show();
}else
{
interfaceObj.senddata(title,tag);
dismiss();
}
}
}
Wewnątrz fragmentu lub działania, z którego uruchamiane jest okno dialogowe, należy zawiera atrybut setTargetFragment.
private void callUploadDialog()
{
UploadDialogFragment fragment = new UploadDialogFragment();
fragment.setTargetFragment(this, 0);
FragmentManager manager = getFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.fade_in, R.anim.fade_in);
fragment.show(ft, "UploadDialogFragment");
fragment.setCancelable(false);
}
I wreszcie należy zaimplementować interfejs (który został uznany wewnątrz fragmentu dialogowym) i zastąpić metodę
@Override
public void senddata(String title,String optionaltag) {
this.videoTitle=title;
this.optionalTag=optionaltag;
}
myślę, że ten post będzie pomocny dla tych, którzy są przy użyciu fragmentu dialogowe dla pierwszy raz . Z trudem szukałem rozwiązania. Miejmy nadzieję, że rozwiąże to czyjś problem w przyszłości. (Przepraszamy za język)
- 1. Dodanie fragmentu do dialogowym
- 2. Funkcja DialogFragment zgłasza wyjątek ClassCastException, jeśli wywoływana jest z fragmentu
- 3. Jak wysłać dane z działania do jego fragmentu macierzystego?
- 4. Jak przekazywać dane z fragmentu do okna dialogowegoFragmentacja
- 5. Odzyskaj dane z okna dialogowego fragmentu - najlepsze praktyki?
- 6. Pokaż DialogFragment z innego DialogFragment
- 7. Jak pobrać dane z listy ze słownika
- 8. Jak mogę pobrać dane z AsyncTasks doInBackground()?
- 9. Jak wyświetlić DialogFragment z Handler'a
- 10. Jak mogę pobrać dane z SQLite do VB6?
- 11. Jak mogę pobrać dane z procedury składowanej do tabeli tymczasowej?
- 12. Jak pobrać dane z tablicy i wstawić do bazy
- 13. Jak dodać animację do DialogFragment?
- 14. W jaki sposób DialogFragment wpływa na cykl życia fragmentu wywołującego?
- 15. Jak dodać EditText do DialogFragment?
- 16. Jak zarządzać DialogFragment z RxJava?
- 17. pobrać dane z JSON z Angular2 Obietnicy
- 18. Jak przenieść DialogFragment z centrum?
- 19. pobrać dane z metatagów użyciu BeautifulSoup
- 20. Jak pobrać dane przez api w redux?
- 21. Jak pobrać dane intraday giełdowe R
- 22. oddzwonienie do fragmentu docelowego za pomocą interfejsu
- 23. Jak pobrać dane HTML POST do manipulacji w WebForms ASP.NET?
- 24. onAttach oddzwonienie z fragmentu do działalności
- 25. Jak pobrać wszystkie dane w jednym zapytaniu
- 26. Jak pobrać dane wejściowe MIDI w C++?
- 27. Global.asax - Application_Error - Jak mogę pobrać dane strony?
- 28. Powracanie danych z DialogFragment do adaptera
- 29. Reactjs: Jak pobrać dane do załadowania przed zamontowaniem komponentu?
- 30. Jak przejść do fragmentu z działalności
http://stackoverflow.com/questions/17966605/fragments-how-to-start-dialog-from-fragment/17968000#17968000. tutaj zwracana wartość boolowska zamiast tego zwraca wartość edittext. Lub użyj interfejsu. – Raghunandan
Spróbuję)) dziękuję bardzo –