android-fragments 如何在tabLayout中从不同的片段传输数据?

yptwkmov  于 2022-11-14  发布在  Android
关注(0)|答案(5)|浏览(227)

将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();
请帮我解决这个问题,我真的需要在我的项目推进。提前谢谢你!

6rqinv9w

6rqinv9w1#

使用共享首选项,在OngletCours中创建一个共享首选项,然后从OngletNotes中读取。此类有一个所有客户端共享的示例,因此在本例中它是有意义的。转到此链接刷新它的代码语法。https://developer.android.com/training/basics/data-storage/shared-preferences.html
嘿,记住这一点,以便将来在存储数据时将其序列化。gson是一个很棒的库。Gson是一个Java库,可以用来将Java对象转换为JSON表示。它还可以用来将JSON字符串转换为等价的Java对象。Gson可以处理任意Java对象,包括没有源代码的预先存在的对象。只是一些需要考虑的东西。

1dkrff03

1dkrff032#

"试试这个"
使用Bundle发送字符串:

YourFragment fragment = new YourFragment();
Bundle bundle = new Bundle();
bundle.putString("YourKey", "YourValue");
fragment.setArguments(bundle);

//Inflate the fragment
getFragmentManager().beginTransaction().add(R.id.container,fragment).commit();

在新片段的onCreateView中:

//Retrieve the value
    String value = getArguments().getString("YourKey");

我希望这对你的案子有用

eivgtgni

eivgtgni3#

为片段提供构造函数

public OngletNotes () {
        setArguments(new Bundle());
    }
f8rj6qna

f8rj6qna4#

如果选项卡中只有两个framgent,请不要使用Bundle传输数据。
我会从头解释给你听..
对于ViewPager,你需要正确的片段列表。就像下面

List<Fragment> fragmentsList = new ArrayList<Fragment>();
fragmentsList.add(Fragment1)-->OngletCours
fragmentsList.add(Fragment2)-->OngletNotes

您将在ViewPagerAdapter中传递上面的列表。
在Fragment2中有一个函数,如下所示

public void getDataFromFragmentOne(String item){
 // Do the mannipulation
 }

在FragmentOne中单击该项目时,只需像下面这样调用上面的函数
在这个例子中,我们可以从一个片段中获取一个数据,这个数据是从一个片段中获取。
上面的操作应该可以很好地工作。因为你没有在onCreateView或onCreate中处理数据。每当点击项目时,你会将数据传递到第二个框架,因为offsreenpage限制,这个框架已经在viewpager中了。

ymzxtsji

ymzxtsji5#

在Kotlin的情况下,你可以在fragment中创建newInstance;

class TeamTwoFragment :Fragment {
   lateinit var eventsX: EventsX
   lateinit var stateList: StateList
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

}
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    arguments?.let {
        eventsX = it.getParcelable (EVENT_X)!!
        stateList = it.getParcelable(STATE_LIST)!!
    }

}
fun newInstance(someInt: EventsX, events: StateList): TeamTwoFragment {
    val myFragment = TeamTwoFragment().apply {
        val args = Bundle()
        args.putParcelable(EVENT_X, someInt)
        args.putParcelable(STATE_LIST, events)
        setArguments(args)
    }

    return myFragment
}

 And from tablayout activity or fragments when setup tablayout:
  
 setupViewPager(binding.viewPager,TeamOneFragment().newInstance(eventsX,events))

相关问题