简体   繁体   中英

Passing data from Fragments to Fragments error

I use a Bundle to pass data between Fragments. However, I ran into some problems. My Bundle is not working, I do not know why. Because I do everything as I did before.

Here is my Activity:

@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;
        }
    };
}

My first Fragment:

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;
}

There is a second Fragment which has a Button . If the Button is pressed, then the third Fragment is open.

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();
    }
});

My third Fragment:

@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;
}

You have not passed anything from your second Fragment while opening your third Fragment . Hence you need to do something like the following.

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();
    }
});

I think the problem is your second fragment is not passing the bundle from the first fragment to the third fragment in this code

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();
        }
    }); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM