将数据(ArrayList)从活动发送到片段



我只有一个Activity和一个关联的FragmentFragmentNavigation Drawer的一部分。现在我有了一个不断变化的ArrayList<String>。我希望这样,每当我打开Navigation Drawer时,ArrayList都应该传递给Fragment

CCD_ 9具有用CCD_ 11填充的CCD_。

这是带有ToolbarDrawerLayout:代码的Activity

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代码的哪一点上我可以真正传递数据。

附言:大部分代码都是从YouTube视频系列中显示的代码修改而来的。它以目前的形式工作。

在您的片段中执行此操作。

GetDataInterface sGetDataInterface;

public interface GetDataInterface {
    ArrayList<String> getDataList();
}
@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        sGetDataInterface= (GetDataInterface) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString() + "must implement GetDataInterface Interface");
    }
    @Override
public void onResume() {
    super.onResume();
    if(sGetDataInterface != null){
            mData = sGetDataInterface.getDataList();
    }
}
}

在您的主要活动

public class MainActivity implements YourFragmentName.GetDataInterface {
    @Override
    public ArrayList<String> getDataList() {
        return mDataArrayList;
    }
}

使用EventBus(如https://github.com/greenrobot/EventBus(。定义自己的事件(如NavigationDataChangedEvent(,在Fragment.onViewCreated()中为NavigationDataChangedEvent注册Fragment,并在Fragment.onDestroyView()注销(对于避免内存泄漏很重要(。只要数据发生变化,"活动"就可以简单地发布一个NavigationDataChangedEvent来通知片段。通过使用EventBus,您的活动和片段是解耦的。。。

最新更新