将数据从Fragments传递到Fragments错误

问题描述 投票:-1回答:2

我使用Bundle在Fragments之间传递数据。但是,我遇到了一些问题。我的Bundle不工作,我不知道为什么。因为我像以前一样做所有事情。

这是我的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_jegyek);

    BottomNavigationView bottomNav = findViewById(R.id.lista_navigation);
    bottomNav.setOnNavigationItemSelectedListener(navListener);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container_lista,
                new Tantargylista()).commit();
    }
}

private BottomNavigationView.OnNavigationItemSelectedListener navListener =
    new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;

            switch (item.getItemId()) {
                case R.id.nav_tantargylista:
                    selectedFragment = new ObjectList();
                    break;
                case R.id.nav_dolgozatlista:
                    selectedFragment = new ExamList();
                    break;
            }

            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container_lista,
                    selectedFragment).commit();

            return true;
        }
    };
}

我的第一个碎片:

View v;
DB mydb;
ListView listView;
String teszt;

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    v = inflater.inflate(R.layout.fragment_objectlist, container, false);

    listView = (ListView)v.findViewById(R.id.Jegyekview);
    mydb = new DB(getActivity());

    final ArrayList<String> thelist = new ArrayList<>();
    Cursor data = mydb.getTantargynev();

    if (data.getCount() == 0) {
        Toast.makeText(getActivity(), "Empty", Toast.LENGTH_SHORT).show();

    } else {
        while (data.moveToNext()) {
            thelist.add(data.getString(0));
        ListAdapter listadapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, thelist);
        listView.setAdapter(listadapter);
    }

    listView.setOnItemClickListener(
            new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    teszt = thelist.get(i);

                    Bundle bundle = new Bundle();
                    bundle.putString("test", teszt);

                    Fragment targyAdatok = new targyAdatok();

                    Fragment jegyekAllando = new jegyekAllando();
                    jegyekAllando.setArguments(bundle);
                    FragmentTransaction FragTan = getActivity().getSupportFragmentManager().beginTransaction();
                    FragTan.replace(R.id.jegyekMenu, targyAdatok);
                    FragTan.commit();
                }
            }
        });
    }

    return v;
}

还有第二个Fragment有一个Button。如果按下Button,那么第三个Fragment是开放的。

Button button = (Button)v.findViewById(R.id.elemzes);
elemzes.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Fragment jegyekAllando = new jegyekAllando();
        FragmentTransaction FragTan2 = getFragmentManager().beginTransaction();
        FragTan2.replace(R.id.fragment_container_lista,jegyekAllando);
        FragTan2.commit();
    }
});

我的第三个碎片:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_jegyek_allando, container, false);

    Bundle bundle = getArguments();
    String jegyAtlagSt = bundle.getString("test");
    //Here crash the program. :/

    return rootView;
}
java android android-fragments bundle
2个回答
1
投票

在打开你的第三个Fragment时,你没有从你的第二个Fragment传递任何东西。因此,您需要执行以下操作。

Button button = (Button)v.findViewById(R.id.elemzes);
elemzes.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Fragment jegyekAllando = new jegyekAllando();

        // Get a bundle
        Bundle bundle = new Bundle();
        bundle.putString("test", teszt);

        // Set as argument
        jegyekAllando.setArguments(bundle);

        // Begin the transaction
        FragmentTransaction FragTan2 = getFragmentManager().beginTransaction();
        FragTan2.replace(R.id.fragment_container_lista,jegyekAllando);
        FragTan2.commit();
    }
});

0
投票

我认为问题是你的第二个片段没有将包从第一个片段传递到此代码中的第三个片段

Button button = (Button)v.findViewById(R.id.elemzes);
    elemzes.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Fragment jegyekAllando = new jegyekAllando();
            FragmentTransaction FragTan2 = getFragmentManager().beginTransaction();
            FragTan2.replace(R.id.fragment_container_lista,jegyekAllando);
            FragTan2.commit();
        }
    }); 
© www.soinside.com 2019 - 2024. All rights reserved.