Передача информации из Activity в layouttabs
Столкнулся с проблемой, что нужно передать строку из MainActivity во фрагмент, который находится в viewpager. Подскажите как данный процесс можно реализовать?
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
private oneFragment one;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tabLayout = (TabLayout)findViewById(R.id.tablayout);
viewPager = (ViewPager)findViewById(R.id.viewpager);
one = new oneFragment();
tabLayout.setupWithViewPager(viewPager);
viewPagerAdapter adapter = new viewPagerAdapter(getSupportFragmentManager(), 0);
adapter.addFragment(one, "Monday");
viewPager.setAdapter(adapter);
}
}
public class oneFragment extends Fragment {
private TextView textView;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment, container, false);
textView = (TextView) v.findViewById(R.id.textview);
return v;
}
public void addData(String data) {
textView.setText(data);
}
}
public class viewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment>fragments = new ArrayList<>();
private List<String>title = new ArrayList<>();
public viewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
public void addFragment(Fragment fragment, String Title){
fragments.add(fragment);
title.add(Title);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return title.get(position);
}
}
Ответы (2 шт):
Автор решения: Circassian
→ Ссылка
Ты ведь уже инициализировал фрагмент и во фрагменте сделал соответствующий метод. Осталось лишь его вызвать
one.addData("")
Или сделать список fragments в адаптере public и брать из него фрагмент по position
Fragment fragment = adapter.fragments.get(0);
if (fragment instanceof oneFragment) {
((oneFragment) fragment).addData("");
}
Или
Object o = adapter.getItemPosition(0);
if (o instanceof oneFragment) {
((oneFragment) o).addData("");
}
Автор решения: VRoff
→ Ссылка
В ViewPagerAdapter нужно переписать метод getItem
@NonNull
@Override
public Fragment getItem(int position) {
oneFragment one = new oneFragment();
Bundle bundle = new Bundle();
bundle.putString("message", "Hello");
one.setArguments(bundle);
return one;
}
А в самом классе фрагмента добавить
textView.setText(getArguments().getString("message"));