【发布时间】:2015-07-13 00:19:51
【问题描述】:
我只有一个Activity 和一个关联的Fragment。 Fragment 是 Navigation Drawer 的一部分。现在我有一个不断变化的ArrayList<String>。我希望这样,每当我打开Navigation Drawer 时,ArrayList 应该被传递给Fragment。
Fragment 有一个ListView,其中填充了ArrayList。
这是Activity,代码为Toolbar 和DrawerLayout:
toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
OnlineNavDrawerFragment drawerFragment = (OnlineNavDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.fragmentUsers);
drawerFragment.setUp((DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
这是Fragment的对应代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_online_nav_drawer, container, false);
ListView lvOnline = (ListView) view.findViewById(R.id.lvOnlineUsers);
return view;
}
public void setUp(DrawerLayout drawerLayout, Toolbar toolbar) {
mDrawerLayout = drawerLayout;
mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout,
toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
getActivity().invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
getActivity().invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
}
我面临以下问题:如何将ArrayList<String>从Activity传递到Fragment。
另外,我看不到 Activity 代码中的哪一点我可以真正传递数据。
PS:大部分代码是 YouTube 视频系列中显示的代码的修改版本。它以现在的形式工作。
【问题讨论】:
-
这取决于您的代码。您必须至少显示您的活动代码。
-
@Foxinsocks 为
Activity和Fragment添加了代码。 -
而不是在打开抽屉时将数据传递给片段。让片段在需要时使用接口从活动中提取数据。通常在 onResume() 中。
-
我相信如果使用 getInstance() 实例化片段会更好,然后在其上传递值..
-
@Sheychan 如果他只在 getInstance 中发送数据,那么每次他打开抽屉时它都不会更新。
标签: java android android-fragments arraylist