Проблема со значением пакета в методе onClickListener - PullRequest
0 голосов
/ 13 июня 2018

У меня проблемы с получением значения пакета в моем методе onClickListener или любом другом методе в целом.У меня есть комментарии помимо кода для лучшего разъяснения.Итак, что происходит, я получаю значение из ActivityA, помещаю его в связку и передаю значения моему фрагменту.Я получаю значение из комплекта и устанавливаю в своем методе установки значение, которое я получаю из комплекта , не равно нулю , если я поднимаю значение, оно показывает правильное значение на экране.Ниже я выкладываю весь свой onCreateMethod, у меня есть эта проблема в течение последних нескольких дней, поэтому любая помощь очень ценится.Что я думаю, так это то, что когда я пытаюсь получить значение из пакета в моем методе onClickListener, он почему-то сбрасывает себя в 0.

Заранее благодарен за вашу помощь

Мой метод onCreateViewво фрагменте

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_todo_list, container, false);
    FloatingActionButton floatingActionButton = view.findViewById(R.id.fab);
    recyclerView = (RecyclerView) view.findViewById(R.id.list);

    bundle = this.getArguments();
    if(bundle != null) {
        fk_id = bundle.getLong("fk");
        setId_2(fk_id); // i try to set the value
        Toast.makeText(getContext(), "iz fragmenta" + getId_2(), Toast.LENGTH_SHORT).show(); // this prints the correct value
        floatingActionButton.setOnClickListener(new View.OnClickListener() { //this button stops working if in the if statement
            @Override
            public void onClick(View v) {
                LayoutInflater li = LayoutInflater.from(getActivity());
                View popupView = li.inflate(R.layout.popup_layout, null);
                final EditText editText = popupView.findViewById(R.id.userInput);
                AlertDialog.Builder adb = new AlertDialog.Builder(getContext());

                adb.setView(popupView);
                adb.setCancelable(false)
                        .setPositiveButton("Dodaj", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                String naziv = editText.getText().toString();
                                Aktivnost_ ak = new Aktivnost_(naziv, "15-jun", fk_id, "kajetan", "todo");
                                dodajAktivnost(ak);
                                array.add(ak);
                                Toast.makeText(getContext(), "dodano" + getId_2(), Toast.LENGTH_LONG).show();

                            }
                        })
                        .setNegativeButton("Prekliči", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                dialogInterface.cancel();
                                Toast.makeText(getContext(), "Preklical sem", Toast.LENGTH_LONG).show();
                            }
                        });
                AlertDialog alertDialog = adb.create();
                alertDialog.setCancelable(true);
                alertDialog.show();
            }
        });


        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
        mmAdapter = new ToDoRecyclerViewAdapter(listAktivnosti(getId_2()), getContext(), mListener);

        mmAdapter.setOnItemClickListner(new ToDoRecyclerViewAdapter.onItemClickListner() {
            @Override
            public void onClick(long i) {
                Intent intent = new Intent(getActivity(), PodrobnostiActivity.class);
                intent.putExtra("key_id", i);
                startActivity(intent);
                Toast.makeText(getContext(), "" + i, Toast.LENGTH_SHORT).show();
            }
        });
        mmAdapter.setOnLongClick(new ToDoRecyclerViewAdapter.OnLongClickListener_() {
            @Override
            public void onLongClick(long i, String item) {
                if (item.equals("doing")) {
                    boolean update_1 = db.updateList(i, item);
                    if (update_1) {
                        //NAREDI SE LEPE ANIMACIJE
                        android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.detach(TodoFragment.this).attach(TodoFragment.this).commit();

                        Toast.makeText(getContext(), "Dodano v bazo.!", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getContext(), "Prislo je do napake!", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        recyclerView.setAdapter(mmAdapter);
    }  
    return view;
}

РЕДАКТИРОВАНИЕ

    private long fk_id;
public long getId_2() {
    return fk_id;
}
public void setId_2(long fk_id) {
    this.fk_id = fk_id;
}

EDIT_2

Эта часть в моей деятельности onCreate

    Intent intent = getIntent();
    long id = intent.getLongExtra("intVariableName",0);

android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.container, TodoFragment.newInstance(id), "a");
    fragmentTransaction.commit();

И я сделал метод newInstance в своем фрагменте.

    public static TodoFragment newInstance(long id) {
    TodoFragment fragment = new TodoFragment();
    Bundle b = new Bundle();
    b.putLong("fk",id);
    fragment.setArguments(b);
    return fragment;
}

1 Ответ

0 голосов
/ 13 июня 2018

Попробуйте следующее:

  1. Поскольку у вас уже есть доступ к данным в вашей переменной fk_id в вашем фрагменте, вы можете пометить их как final и передать их в тост:

Toast.makeText(getContext(), "dodano" + fk_id, Toast.LENGTH_LONG).show();

ИЛИ

Попробуйте пометить getId_2 и setId_2 с синхронизированными , а также onCreateView(), таким образом, данные, совместно используемые этими двумя методами, будут синхронизированы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...