【问题标题】:How to send informations from a fragment to another hosting different TabbedActivites如何将信息从一个片段发送到另一个托管不同的 TabbedActivites
【发布时间】:2017-05-12 15:29:45
【问题描述】:

我有一个带有 3 个选项卡的 TabbedActivity (OngletCours)。每个选项卡都有一个 listView,当我单击它时,会打开一个 AlertDialog。其中一个选项是转到另一个有 2 个选项卡的 TabbedActivity(OngletJalonNotes)。

我在我的应用程序中使用数据库。我希望能够根据我在第一个 TtabbedActivity 中单击的项目创建一些“Jalon”(我在 TabbedActivity 中单击的项目的 id 将是我的数据库表的 FK)。我想将它们显示在一个列表视图

我正在这样做:在第一个 TabbedActiviy 的片段上,我使用了 Bundle 和 FragmentManager 来发送项目的 ID,并且在片段“Jalon”中我试图获取我传递的值,但是我得到一个 NullPointerException。我怎样才能解决这个问题 ?我确实需要在第二个片段中获取 ID,以便 Ii 可以在方法中使用它。

这是 AlertDialog 的正按钮的 firstFragment 'CoursActuel' 代码:

     .setPositiveButton("Ajouter des jalons à ce cours", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {

                            int idcours = cursor_modifier.getInt(0);
                            OngletJalonsAfficher onglet = new OngletJalonsAfficher();
                            Bundle args = new Bundle();
                            args.putInt("idcoursfk",idcours);
                            FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                            onglet.setArguments(args);
                            fragmentTransaction.replace(R.id.container,onglet,"");
                            fragmentTransaction.commit();
                        }
                    });

在片段“OngletJalonsAfficher”中:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    final View rootView = inflater.inflate(R.layout.activity_onglet_jalon_afficher, container, false);

    //NULLPOINTEREXCEPTION HERE
    int idcours = getArguments().getInt("idcoursfk");

    final ListView lvJalonsPasse;
    lvJalonsPasse =(ListView)rootView.findViewById(R.id.ListJalonsPasse);


    final SimpleCursorAdapter adapter;
    final DatabaseHelper dbhelper = new DatabaseHelper(getActivity());

    Cursor cursor = dbhelper.getAllJalonsPasse(//i need to put the value 'idcours' here...);
    String[] from = { "date_jalon", "designation_jalon" };
    int[] to = { R.id.text_branche_cours, R.id.text_designation };
    adapter = new SimpleCursorAdapter(getContext(), R.layout.list_row, cursor, from, to, 0);
    lvJalonsPasse.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    return rootView;
}

感谢你们以后的帮助!如果您需要更多代码,请告诉我!

【问题讨论】:

    标签: android android-fragments fragmentmanager


    【解决方案1】:

    您创建了一个捆绑包,但从未将其附加到片段。

    像这样的

    fragment.setArguments(bundle);
    


    顺便说一句:int idcours = getArguments().getInt("idcoursfk"); 是一个潜在的 NPE,最好喜欢:

     Bundle bundle = this.getArguments();
            if (bundle != null) {
               idcours = bundle.getInt("idcoursfk");
            }
    

    int idcours = cursor_modifier.getInt(0);这里也一样,NPE

    【讨论】:

    • 哦,我忘记了...但是为什么当我单击时我仍然不去另一个片段?我在第一个片段中遗漏了什么吗?
    • 例如 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();片段.setArguments(捆绑); fragmentTransaction.replace(R.id.you_fragment_container, fragment, ""); fragmentTransaction.commit();
    • 你写了'R.id.you_fragment_container',这是我在TabbedActivity的xml文件中放在我的ViewPager上的id吧?
    • 如果我在调试模式下运行,在我的第一个代码结束时,我会转到第二个片段并获得我放入捆绑包中的值,但它不会显示我的新片段。 .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多