在TabLayout Android Studio的2个片段之间传输数据

时间:2017-03-06 08:44:58

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

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

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

我已经尝试了一些东西,但是我在第23行得到了NullPointerException:

  

03-06 09:38:32.874 23677-23677 / com.example.dasilvadd.students E / AndroidRuntime:FATAL EXCEPTION: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;
}

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

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你的逻辑有点困惑。您正在检查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();
}