2

Привет всем, я хочу знать, как получить данные из двух разных фрагментов в макете вкладок.Как получить данные из двух разных фрагментов в вкладках в основное действие

например: на этом изображении две вкладки tab1 и tab2 имеют разные значения, сохраненные в тексте редактирования.

tab1 helloooooo, tab2 hiiiiiii

и у меня есть кнопка доступна в основной деятельности, которая используется для получения данных из обеих вкладок в то же время.

Теперь моя проблема, как я могу получить данные из обоего вкладок в том же самое время, когда пользователь нажимает на кнопке данных

ПОЛУЧИТЬ

Надеются, что вы под стоять мою проблему.

Примечание: перед тем, как проголосовать, пожалуйста, прочитайте его еще раз.

enter image description here

ответ

1

Вы можете использовать как этот путь:

Bundle bundle = new Bundle(); 
bundle = getActivity().getIntent().getExtras(); 
YourFragment fragment = new YourFragment(); 
bundle.putString("yourKey", yourValue); 
fragment.setArguments(bundle); 

Тогда вы можете получить их в вашем втором фрагменте

в onCreateView

if (getArguments() != null) 
{ 
    mParam1 = getArguments().getString("yourKey"); 
} 
+0

вы можете объяснить с кодом .. ? – sunny

+0

В вашем первом фрагменте поместите этот код с заменой вашего имени второго фрагмента. Можете ли вы предоставить код фрагмента? –

+0

Если это полезно, проголосуйте. –

1

объект члена Take обоих фрагмента в вашем деятельность ..

FirstFragment mFirstFragment; 
SecondFragment mSecondFragment; 

Создать экземпляр как в getItem(int position) метод ViewPagerAdapter.

@Override 
    public Fragment getItem(int position) { 
     // instantiate the fragment for the given page. 

     switch (position) { 
     case 0: 
      if (null == mFirstFragment) { 
       mFirstFragment = FirstFragment.newInstance(); 
      } 
      return mFirstFragment; 
     case 1: 
      if(null == mSecondFragment) { 
       mSecondFragment = SecondFragment.newInstance(); 
      } 
      return mSecondFragment;   
     } 

     return null; 

    } 

Вызов getData метода как фрагмент при нажатии кнопки щелкнула от активности.

@Override 
public void onClick(View v) { 

    switch (v.getId()) { 
     case R.id.button1: 
      // Get data and use it as you want. 
      mFirstFragment.getData(); 
      mSecondFragment.getData(); 
     break; 
    } 
} 
3

1.) Держите ссылку на свой фрагмент в своей деятельности.

public class Activity extends AppCompatActivity { 
     private yourFargment frag1,frag2; 
    } 

2.) Получить ссылку на объект в ваших ссылочных переменных в Adapter «s getItem().

@Override 
public Fragment getItem(int index) { 
    switch (index) { 
     case 0: 
      frag1 = yourFargment.newInstance(index); 
//frag1 =new yourFargment(); can also be used 

      return frag1; 
     case 1: 
      frag2 = yourFargment.newInstance(index); 
      return frag2; 
    } 
    return null; 
} 

3.) Внутри вашего onClick вы можете просто получить эти значения из edittext.

onClick(View..){ 
String val1 = frag1.edittext1.getText().toString(); // Note: make your `edittext` public 
String val2 = frag2.edittext2.getText().toString(); 

или

String val1 = frag1.getData(); 
String val2 = frag2.getData(); 
} 

где getData является public метода внутри вашего fragment

public class yourFragment..{ 
     public String getData(){ 
     return edittext.getText().toString(); 
     // Note: with this no need to make your `edittext` public 
    } 
} 
1

В то время, когда вы настройка фрагмент в закладках у вас есть 2 объектов этих фрагментов. Используя эти объекты, вы можете получить значение из ваших фрагментов. Напишите следующий код в свой MainActivity, например.

if(tab1fragment != null) { 
    String text = tab1fragment.getData(); 
} 

и фрагмент, создать метод, как

public String getData(){ 
return edittext.getString().toString(); 
} 

Таким образом, вы можете восстановить данные из фрагментов.

1

Tablayout содержит только элементы TabItems, а не фрагменты. Итак, я считаю, что вы используете TabLayout в сочетании с ViewPager, который фактически содержит 2 разных фрагмента. Возможно, вы хотите getData() в Activity из 2 фрагментов. На этом этапе вы можете легко отформатировать обратный вызов Activity и предоставить данные так же, как getData(). Код будет выглядеть

В Фрагмент

public class BaseFragment extends Fragment { 
    protected DataCallback mCallback; 

    @Override public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof DataCallback) { 
      mCallback = (DataCallback) context; 
     } 
    } 

    //some place fragment affect to data 
    private void someFunction() { 
     mCallback.updateDataToActivity(data); 
    } 
} 

В деятельности

public class MyActivity extends BaseActivity implements DataCallback { 

    T data; 
    public void updateDataToActivity(T data) { 
     this.data = data 
    } 

    // This is your getData function 
    private T getData() { 
     return data; 
    } 
} 

И DataCallback

public interface DataCallback { 
    void updateDataToActivity(T data); 
}