【问题标题】:transfer data between 2 fragments of a TabLayout Android Studio在 TabLayout Android Studio 的 2 个片段之间传输数据
【发布时间】:2017-03-06 17:18:27
【问题描述】:

所以我有一个带有 TabLayout 的应用程序。在那里,我创建了 2 个选项卡(片段)。我的第一个片段是 OngletCours,第二个片段是 OngletNotes。

我在第一个选项卡/片段中有一个 ListView。我想将我在该 ListView 中单击的项目转移到第二个 Fragment 到 TextView。

我已经尝试了一些方法,但在第 23 行出现 NullPointerException:

03-06 09:38:32.874 23677-23677/com.example.dasilvadd.students E/AndroidRuntime: 致命异常: main java.lang.NullPointerException 在 com.example.dasilvadd.students.OngletNotes.onCreateView(OngletNotes.java:23)

这是我的第一个标签 OngletCours 中的代码(仅限 setOnItemClickListener):

    final ListView l1 = (ListView) rootView.findViewById(R.id.ListCours);

    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) {
             l1.getItemAtPosition(i);
                //Put the value
                OngletNotes onotes = new OngletNotes();
                Bundle args = new Bundle();
                args.putString("Item","l1.getItemAtPosition(i)");
                onotes.setArguments(args);
               getFragmentManager().beginTransaction().add(R.id.container, onotes).commit();
            }
                ((Onglets)getActivity()).goToFragment(1);
        }
    });  
    return rootView;
    }

这是我的第二个标签 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);
    //Retrieve the value
     //THE ERROR IS HERE !
   String cours = getArguments().getString("Item");
    Cours.setText(cours);
    return rootView;
}

public static OngletNotes newInstance() {
    OngletNotes fragment = new OngletNotes();

    return fragment;
}

所以,我不知道如何将所选项目转移到第二个选项卡中。 我是否必须在名为 Onglets 的 TabbedActivity 中创建方法?请告诉我您是否也需要该课程的代码。

提前谢谢你。

【问题讨论】:

    标签: java android listview android-fragments android-tablayout


    【解决方案1】:

    我认为你的逻辑有点混乱。您正在检查 null,如果片段为 null,则不执行任何操作。

    你可以这样简化: 首先检查 fragment 是否为 null ,如果是则创建一个新实例,然后 将参数放在 if/else 之外,以便确保每次都得到它们。 还将您的字符串项放入变量中。

    @Override
    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
        OngletNotes fragment = ((Onglets)getActivity()).getOngletNotes ();
        if(fragment == null) {
            fragment = OngletNotes.getInstance();
        }
        String item = adapterView.getItemAtPosition(i).toString();
        //Put the value
        Bundle args = new Bundle();
        args.putString("Item",item);
        fragment.setArguments(args);
        getFragmentManager().beginTransaction().add(R.id.container, fragment).commit();
    }
    

    【讨论】:

    • 我得到这个错误:错误:(125, 51)错误:不兼容的类型:对象不能转换为字符串在字符串项= l1.getItemAtPosition(i)
    • 尝试添加 toString();
    • 我在这里开始时遇到了同样的错误:String cours = getArguments().getString("Item"); NullPointerException..
    • OK 显示您定义 ListAdapter 的代码。
    • listeCours = dbhelper.getAllCours(); String item; String[] cours = {""}; arrayList = new ArrayList&lt;&gt;(Arrays.asList(cours)); final ArrayAdapter adapter = new ArrayAdapter&lt;String&gt; (getContext(), android.R.layout.simple_list_item_1, arrayList); l1.setAdapter(adapter); for (int i = 0; i &lt; listeCours.size(); i++) { item = listeCours.get(i).getCours(); arrayList.add(item); adapter.notifyDataSetChanged();
    猜你喜欢
    • 2016-03-25
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多