[英]How to pass variable from activity to fragment not working all of previous question
how to pass a variable from ViewSyllabusActivity to fragment tried many examples and many times i want to pass data ViewSyllabusActivity .java to Fragment.java but im unable to send data help me thanks in advance 如何将变量从ViewSyllabusActivity传递给fragment尝试了很多示例,而且很多次我想将数据传递给ViewSyllabusActivity .java到Fragment.java但我无法发送数据帮助我提前感谢
ViewSyllabusActivity.java ViewSyllabusActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_syllabus);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
setupTabIcons();
Intent intent = getIntent();
int sem = intent.getIntExtra(SubListActivity.EXTRA_NUMBER, 0);
String sid = intent.getStringExtra(SubListActivity.EXTRA_TEXT);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(new ObjFragment(), "Objectives");
adapter.addFrag(new ContActivity(), "Contents");
adapter.addFrag(new LaboActivity(), "Laboratory");
adapter.addFrag(new TBActivity(), "Text Books");
adapter.addFrag(new LaboActivity(), "References");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
}
Fragment.java Fragment.java
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_obj, container, false);
TextView textView = view.findViewById(R.id.obj);
return view;
}
Use an EventBus. 使用EventBus。 It's really easy and nice.
这真的很容易而且很好。
1 - Create an event : 1-创建事件:
public class SendDataToFragmentEvent{
private YourDataType yourData;
public SendDataToFragmentEvent(YourDataType yourData){
this.yourData = yourData;
}
public void getYourData(){return yourData;}
}
And than in your activity , on the moment you want to send data to fragment: 而且,比起您的活动,在您想要将数据发送到片段的那一刻:
EventBus.getDefault.post(new SendDataToFragmentEvent(yourDataHere));
And than you must wait for this data in the fragment : 而且,您必须等待片段中的以下数据:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSendDataToFragmentEvent(SendDataToFragmentEventevent
event) {
/* Do something with your data here*/
};
Don't forget the EventBus must know when to start listening or stop : 不要忘记EventBus必须知道何时开始收听或停止:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
This is because Eventbus stays here forever untill your fragment/activity is destroyed . 这是因为Eventbus会一直呆在这里,直到您的片段/活动被破坏为止。
Note : The fragment must be open to listen from the activity your event . 注意:必须打开该片段以侦听您的活动。
Here is the link to that library , I found it really nice. 这是该库的链接,我发现它真的很好。
you have send some values in ViewPagerAdapter Like this:- 您已经在ViewPagerAdapter中发送了一些值,如下所示:-
@Override
public Fragment getItem(int position) {
Bundle bundle = new Bundle();
if(position == 0){
bundle.putInt("position", position);
bundle.putString("survayType", "your value");
mFragmentList.get(position).setArguments(bundle);
}else if(position == 1){
bundle.putInt("position", position);
bundle.putString("survayType", "your value");
mFragmentList.get(position).setArguments(bundle);
}else if(position == 2){
bundle.putInt("position", position);
bundle.putString("survayType", "your value");
mFragmentList.get(position).setArguments(bundle);
}else if(position == 3){
bundle.putInt("position", position);
bundle.putString("survayType", "your value");
mFragmentList.get(position).setArguments(bundle);
}else if(position == 4){
bundle.putInt("position", position);
bundle.putString("survayType", "your value");
mFragmentList.get(position).setArguments(bundle);
}
return mFragmentList.get(position);
}
and get values in fragment like this:- 并像这样获取片段中的值:
String survayType = getArguments().getString("survayType");
i do this and it is working for me. 我这样做,它正在为我工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.