java - 将数据(ArrayList)从 Activity 发送到 Fragment

标签 java android android-fragments arraylist

我只有一个Activity只有一个相关 Fragment . FragmentNavigation Drawer 的一部分.现在我有一个 ArrayList<String>不断变化。我想要这样,每当我打开 Navigation Drawer , ArrayList应该传递给 Fragment .

Fragment有一个 ListView其中填充了 ArrayList .

这是 Activity代码为 ToolbarDrawerLayout :

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>来自 ActivityFragment .

此外,我看不到 Activity 中的哪一点代码我实际上可以传递数据。

PS:大部分代码是 YouTube 视频系列中显示的代码的修改版本。它以目前的形式运作。

最佳答案

在您的 fragment 中执行此操作。

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();
    }
}
}

在你的主要 Activity 中

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

关于java - 将数据(ArrayList)从 Activity 发送到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31373877/

相关文章:

android - ActionBar 搜索的 ExpandedView 上的空指针

java - JSessionId 在登录后发生变化,Angular 5 正在通过请求发送新的 JSessionID 并丢弃旧的 jsessionid

java - 为什么在 IntelliJ IDEA 中创建 sbt 项目会导致 "Permission Denied"?

java - Pyjnius 自定义 java 方法返回 'JavaException: Unable to find a None Method' 在 Public Static 之后工作

android - 从 fragment 的 onCreateView 调用 AsyncTask 方法失败

android - 使用 fragment

java - 新的 Obj,总是还是有时?

java - 我应该在 Android 中使用 AsyncTask 来管理套接字连接吗?

android - Android 设备上的 Boost Asio deadline_timer 不会在到期时间触发,而是在稍后的时间触发

android - 滑动停止服务以删除