将ListView的选定项传递到另一个片段时出现问题。
我有一个TabbedActivity,它有两个选项卡。第一个选项卡名为OngletCours,第二个选项卡名为OngletNotes。
传递我单击的项目时出现错误。
我已经尝试了整个周末,但没有成功地转移项目,我点击到第2页签/片段。
下面是我的第一个片段/选项卡OngletCours中的代码(我只向您展示setOnItemClickListener:
l1.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
OngletNotes fragment = ((Onglets)getActivity()).getOngletNotes();
if(fragment == null) {
fragment = OngletNotes.newInstance();
}
//récupération de la position convertie en String de l'item que j'ai choisi
String item = l1.getItemAtPosition(i).toString();
Bundle args = new Bundle();
args.putString("Item",item);
fragment.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.container, fragment).addToBackStack(null).commit();
((Onglets)getActivity()).goToFragment(1);
}
});
我的第二个选项卡/片段OngletNotes如下所示:
public class OngletNotes extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.ongletnotes, container, false);
//where i want to insert the selectedItem
TextView Cours = (TextView)rootView.findViewById(R.id.TVCours);
Bundle bundle=getArguments();
String cours="";
//ERROR !
cours = bundle.getString("Item");
//Retrieve the value
Cours.setText(cours);
return rootView;
}
public static OngletNotes newInstance() {
OngletNotes fragment = new OngletNotes();
// put values which you want to pass to fragment
// Bundle args = new Bundle();
// fragment.setArguments(args);
return fragment;
}
我有以下错误:
03-06 12:48:13.959 1033-1033/com.示例.dasilvadd.学生E/Android运行时间:致命异常错误:发生异常错误,可能是因为您的浏览器没有找到正确的页面。
第23行是下面的一行:
绑定包=getArguments();
请帮我解决这个问题,我真的需要在我的项目推进。提前谢谢你!
5条答案
按热度按时间6rqinv9w1#
使用共享首选项,在OngletCours中创建一个共享首选项,然后从OngletNotes中读取。此类有一个所有客户端共享的示例,因此在本例中它是有意义的。转到此链接刷新它的代码语法。https://developer.android.com/training/basics/data-storage/shared-preferences.html
嘿,记住这一点,以便将来在存储数据时将其序列化。gson是一个很棒的库。Gson是一个Java库,可以用来将Java对象转换为JSON表示。它还可以用来将JSON字符串转换为等价的Java对象。Gson可以处理任意Java对象,包括没有源代码的预先存在的对象。只是一些需要考虑的东西。
1dkrff032#
"试试这个"
使用Bundle发送字符串:
在新片段的onCreateView中:
我希望这对你的案子有用
eivgtgni3#
为片段提供构造函数
f8rj6qna4#
如果选项卡中只有两个framgent,请不要使用Bundle传输数据。
我会从头解释给你听..
对于ViewPager,你需要正确的片段列表。就像下面
您将在ViewPagerAdapter中传递上面的列表。
在Fragment2中有一个函数,如下所示
在FragmentOne中单击该项目时,只需像下面这样调用上面的函数
在这个例子中,我们可以从一个片段中获取一个数据,这个数据是从一个片段中获取。
上面的操作应该可以很好地工作。因为你没有在onCreateView或onCreate中处理数据。每当点击项目时,你会将数据传递到第二个框架,因为offsreenpage限制,这个框架已经在viewpager中了。
ymzxtsji5#
在Kotlin的情况下,你可以在fragment中创建newInstance;