2016-05-16 4 views
0

У меня проблема с отправкой данных из фрагмента в фрагмент. У меня есть DialogFragment с именем fmonday, это фрагмент Viewpager.Как отправить данные с DialogFragment на DialogFragment?

Я звоню другому DialogFragment, названному AlertDFragment, чтобы добавить некоторые данные в мой фрагмент. Я могу прочитать данные из счетчика, он работает хорошо.

Теперь необходимо отправить одну переменную, введите string, from AlertDFragment в fmonday.

Вот код fmonday:

public class fmonday extends DialogFragment implements LoaderManager.LoaderCallbacks<Cursor> { 

DB db; 
Button button12; 
DialogFragment dlg1; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dlg1 = new AlertDFragment(); 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fmonday, container, false); 

    button12 = (Button) rootView.findViewById(R.id.button12); 
    button12.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 

      dlg1.show(getFragmentManager(), "dlg1"); 

     } 
    }); 
    return rootView; 
} 

И код AlertDFragment:

public class AlertDFragment extends DialogFragment { 
Spinner spin; 
DB db; 
String string1; 
Button button13; 
private String namestr; 
public Dialog onCreateDialog(Bundle savedInstanceState) { 


    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()); 
    LayoutInflater li = LayoutInflater.from(getActivity()); 
    View fdfS = li.inflate(R.layout.fdf, null); 
    adb.setView(fdfS); 
    spin=(Spinner)fdfS.findViewById(R.id.spinner); 
    db = new DB(getActivity()); 
    db.open(); 
    spin.setOnItemSelectedListener(new OnSpinnerItemClicked()); 
    loadSpinnerData(); 
    button13 = (Button) fdfS.findViewById(R.id.button13); 
    button13.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(getActivity().getApplicationContext(), "Clicked : " + 
        string1, Toast.LENGTH_LONG).show(); 
      getDialog().dismiss(); 
     } 
    }); 
    return adb.create(); 
} 

Я не могу найти способ, чтобы отправить эту string1 переменную в моей fmonday DialogFragment, потому что просто intent не работает с неактивными вещами. Также прочитайте несколько советов о bundle, но не можете узнать, как с ним работать.

Благодаря

UPDATE fmonday:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    dlg1 = new AlertDFragment(); 
    string1 = getArguments().getString("latitude"); 
} 

AlertDFragment:

public class AlertDFragment extends DialogFragment { 
    Spinner spin; 
    DB db; 
    String string1; 
    Button button13; 
    private String namestr; 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 


    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()); 
    LayoutInflater li = LayoutInflater.from(getActivity()); 
    View fdfS = li.inflate(R.layout.fdf, null); 
    adb.setView(fdfS); 
    spin=(Spinner)fdfS.findViewById(R.id.spinner); 
    db = new DB(getActivity()); 
    db.open(); 
    spin.setOnItemSelectedListener(new OnSpinnerItemClicked()); 
    loadSpinnerData(); 
    button13 = (Button) fdfS.findViewById(R.id.button13); 
    button13.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(getActivity().getApplicationContext(), "Clicked : " + 
        string1, Toast.LENGTH_LONG).show(); 
      Bundle bundle = new Bundle(); 
      bundle.putString("latitude", string1); 
      fmonday alertdfragment= new fmonday(); 
      alertdfragment.setArguments(bundle); 
      getDialog().dismiss(); 
     } 
    }); 
    return adb.create(); 
} 
+0

Вы можете написать getter for'string1', а затем вы можете просто получить к нему доступ через dlg1, как в 'dlg1.getstring1()'. –

+0

Создать пользовательский прослушиватель событий для обмена данными между обоими фрагментами –

ответ

0

установить данные:

Bundle bundle = new Bundle(); 
bundle.putString("latitude", latitude); 
MapFragment mapFragment = new MapFragment(); 
mapFragment.setArguments(bundle); 

Получить данные

String latitude = getArguments().getString("latitude") 
+0

Ошибка: (43, 17) ошибка: не удается найти класс символов MapFragment. Как инициализировать MapFragment? Или это похоже на мой «AlertDFragment»? – ABL

+0

Это всего лишь образец кода, который я дал, вам нужно использовать фрагмент AlertDFragment и fmonday. –

+0

Я не знаю, почему, может быть, я написал что-то неправильно, но это не работает. – ABL

0

Вы можете обрешетка сеттер на свой второй dialogFragment экс:

public void setSmth(String value) 
{ 
    this.myData = value; 
} 

, чем на вашем первом диалоговом

DialogFragment dlg1 = new AlertDFragment(); 
dlg1.setSmth(your data here); 

перед показом второй;

+0

Так что это сеттер для отправки данных из первого фрагмента в dialogFragment? Я хотел бы сделать это по-другому, от 'AlertDFragment' до' fmonday'. Например, когда 'onDismiss();' called, он должен отправить некоторые переменные в 'fmonday' из диалога. – ABL

Смежные вопросы