Ошибка передачи данных из фрагментов во фрагменты - PullRequest
0 голосов
/ 13 марта 2019

Я использую Bundle для передачи данных между фрагментами.Однако я столкнулся с некоторыми проблемами.У меня 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;
}

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы ничего не пропустили со своего второго 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 голосов
/ 13 марта 2019

Я думаю, проблема в том, что ваш второй фрагмент не передает пакет из первого фрагмента в третий фрагмент в этом коде

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