如何将变量从 ViewSyllabusActivity 传递给片段尝试了很多示例,而且很多时候我想将数据 ViewSyllabusActivity .java传递给Fragment.java,但无法发送数据提前帮我谢谢
ViewSyllabusActivity.java
def ndhist(vectors, bins=1000, title=None):
t = time.time()
limits = (vectors.min(), vectors.max())
hists = []
dims = vectors.shape[1]
for dim in range(dims):
h, bs = np.histogram(vectors[:, dim], bins=bins, range=limits)
hists.append(h)
hists = np.array(hists)
fig = plt.figure(figsize=(16, 12))
sns.heatmap(
hists,
yticklabels=50,
xticklabels=False
)
axes = fig.gca()
axes.set(
ylabel=f'dimensions ({dims} total)',
xlabel=f'values (min: {limits[0]:.4g}, max: {limits[1]:.4g}, {bins} bins)',
title=title,
)
def val_to_idx(val):
# calc (linearly interpolated) index loc for given val
return bins*(val - limits[0])/(limits[1] - limits[0])
xlabels = [round(l, 3) for l in limits] + [
v for v in matplotlib.ticker.AutoLocator().tick_values(*limits)[1:-1]
]
# drop auto-gen labels that might be too close to limits
d = (xlabels[4] - xlabels[3])/3
if (xlabels[1] - xlabels[-1]) < d:
del xlabels[-1]
if (xlabels[2] - xlabels[0]) < d:
del xlabels[2]
xticks = [val_to_idx(val) for val in xlabels]
axes.set_xticks(xticks)
axes.set_xticklabels([f'{l:.4g}' for l in xlabels])
plt.show()
print(f'histogram generated in {time.time() - t:.2f}s')
ndhist(np.random.randn(100000, 300), bins=1000, title='randn')
Fragment.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);
}
}
答案 0 :(得分:2)
使用EventBus。这真的很容易而且很好。
1-创建事件:
public class SendDataToFragmentEvent{
private YourDataType yourData;
public SendDataToFragmentEvent(YourDataType yourData){
this.yourData = yourData;
}
public void getYourData(){return yourData;}
}
在您要发送数据到片段的那一刻,
EventBus.getDefault.post(new SendDataToFragmentEvent(yourDataHere));
然后您必须等待片段中的数据:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSendDataToFragmentEvent(SendDataToFragmentEventevent
event) {
/* Do something with your data here*/
};
别忘了EventBus必须知道何时开始收听或停止:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
这是因为Eventbus永远待在这里,直到您的片段/活动被破坏为止。
注意:必须打开该片段以侦听您的事件的活动。
Here是该库的链接,我发现它真的很好。
答案 1 :(得分:0)
您已经在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);
}
并像这样获取片段中的值:-
String survayType = getArguments().getString("survayType");
我这样做,它对我有用。