gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:23 25 4
gpt4 key购买 nike

如何正确地从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com