java - 将数据加载到 fragment 中,然后在其他类中使用该数据

标签 java android android-fragments

如何正确地从 fragment 内的文件导入数据,然后在其他类/Activity/fragment 中使用全局变量中的数据?

我目前有这个:

AssetManager manager = getActivity().getAssets();

在 MyFragment 类中。

该 fragment 在另一个 fragment 内实例化:

MyFragment mf = new MyFragment();

以便能够获取包含从文件加载的数据的变量。

我在 Java 中使用 MyFragment 类没有任何问题,并从任何文件夹加载文件,但在这里,我需要上下文,并从 Assets 文件夹获取文件。

不过,当我想在 MyFragment 类中 getAssets() 时,我得到 null (即使文件夹内有文件)。

这是 MyFragment 的代码:

public class FileReader extends Fragment {
    private AssetManager manager;
    private InputStream is;

    public void loadIDs(){
//        try {
            manager = getActivity().getAssets();
//        } catch (NullPointerException e){
//            e.printStackTrace();
//        }
        //File file = new File("IDs.txt");
        try {
            is = manager.open("IDs.txt");
            Scanner in = new Scanner(is);
            totalBuses = in.nextInt();
            IDs = new String[totalBuses];
            for(int i=0; i<totalBuses; i++){
                IDs[i] = in.next();
            }
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NullPointerException e){
            e.printStackTrace();
        }
    }
}

以及调用 fragment 的类:

public class NavigationDrawerFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        mDrawerListView = (ListView) inflater.inflate(
                R.layout.fragment_navigation_drawer, container, false);
        mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                selectItem(position);
            }
        });

        fr = new FileReader();
        fr.loadIDs();
        String[] list = {"this", "that"};

//        String[] list = new String[fr.getTotalBuses()+1];
//        list[0] = "Bun venit!";
//        list[1] = "Whatever";
//        list[2] = "Something";
//        for(int i=1; i<=fr.getTotalBuses(); i++){
//            list[i] = "Autobus " + fr.getSchedules()[i-1];
//        }

        mDrawerListView.setAdapter(new ArrayAdapter<String>(
                getActionBar().getThemedContext(),
                android.R.layout.simple_list_item_1,
                android.R.id.text1,
                list));
        mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
        return mDrawerListView;
    }
}

enter image description here

最佳答案

直接使用构造函数实例化 Fragment 通常不是一个好习惯。首选选项是使用 newInstance() 静态方法。更多信息:http://developer.android.com/reference/android/app/Fragment.html

但是,由于您没有将 Fragment 用作 View ,而是用作辅助类,那么如何将 Context 作为对 FileReader 构造函数的依赖项传递呢?

fr = new FileReader(getActivity());

关于java - 将数据加载到 fragment 中,然后在其他类中使用该数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31652774/

相关文章:

java - 如何在 Android 应用程序 (sdk 8) 中阻止 InterstitialAd (GMS)

java - 当绑定(bind)的客户端断开连接时通知 Android 服务

java - 使用选项卡和 onTabSelected() 时如何在 fragment 之间传递数据?

java - 我收到错误 : Invocation of init method failed; nested exception is org. hibernate.MappingException: Repeated column in mapping for entity

java - 如何在重写 Activity 的方法之一的同时启动 Activity?

java - OpenGL (LWJGL+Slick-Util) - 文本无法正确显示

java - 同一个类上注解Entity和Component是不是错了

java - 在 android 4.4 中永久禁用我的应用程序的通知栏

android - Activity 启动 fragment ,但 fragment 未正确加载

android - 最佳实践 : Navigation Drawer