Обновление значения переключателей - PullRequest
0 голосов
/ 04 апреля 2020

Пару дней я боролся с обновлением значения переключателя. Я создал группу переключателей внутри фрагмента с двумя кнопками, и мне нужно изменить значение переключателя, в соответствии с тем, которое выбрал пользователь. Это кажется простым и понятным. Проблема в том, что я должен сделать переменную radioButton финальной внутри метода onClick, и в результате я не могу изменить ее значение, и если я установлю sh вне класса, я не смогу получить доступ к ее форме внутри класса! Вот мой код

enter code here
    // Adding a new consultaion ---------------------
    final TextView titleEditText = rootView.findViewById(R.id.titleEditText);
    final TextView bodyEditText = rootView.findViewById(R.id.bodyEditText);
    final RadioGroup radioGroup = getActivity().findViewById(R.id.radioGroup);
    final int radioButtId = radioGroup.getCheckedRadioButtonId();
    final RadioButton radioButton = getActivity().findViewById(radioButtId);


    final Button sendButt = rootView.findViewById(R.id.sendButt);

    radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case R.id.radio_individual:
                    radioButton = rootView.findViewById(R.id.radio_individual);
                    //Toast.makeText(getActivity(), "ind", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.radio_company:
                    radioButton = rootView.findViewById(R.id.radio_company);
                    //Toast.makeText(getActivity(), "com", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    });

А это XML код, введите код здесь

        <RadioButton
            android:id="@+id/radio_individual"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="فرد"
            android:checked="true"

            />
        <RadioButton
            android:id="@+id/radio_company"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="شركة"


             />


    </RadioGroup>

1 Ответ

0 голосов
/ 04 апреля 2020

На самом деле у меня есть решение. Во-первых, нет необходимости использовать функцию radioGroup.setOnCheckedChangeListener, все что мне нужно было сделать, это объявить две переменные radioButtId и radioButton внутри функции onClick кнопки отправки, а не за ее пределами.

// Adding a new consultation ---------------------
    final TextView titleEditText = rootView.findViewById(R.id.titleEditText);
    final TextView bodyEditText = rootView.findViewById(R.id.bodyEditText);
    final RadioGroup radioGroup = rootView.findViewById(R.id.radioGroup);
    final Button sendButt = rootView.findViewById(R.id.sendButt);


    // Sending button -------------------
    sendButt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Check if fields are empty
            if (titleEditText.getText().toString().matches("") || bodyEditText.getText().toString().matches("")){

            } else {


                // Add the consultaion
                showPD("Sending teh consulation", getActivity());

                // We have to declear the variable of the readio button here!
                final int radioButtId = radioGroup.getCheckedRadioButtonId();
                final RadioButton radioButton = rootView.findViewById(radioButtId);

                ParseObject newCon = new ParseObject("Consultations");
                newCon.put("title", titleEditText.getText().toString());
                newCon.put("body", bodyEditText.getText().toString());
                newCon.put("type", radioButton.getText().toString());
                newCon.put("userPointer", ParseUser.getCurrentUser());

                // Saving the block
                newCon.saveInBackground(new SaveCallback() {
                    @Override
                    public void done(ParseException e) {
                        if (e == null) {
                            // seccess
                            hidePD();
                            Toast.makeText(getActivity(), "sent", Toast.LENGTH_SHORT).show();    // We use getActivity() instead of HomeFragment.this because we are dealing with a fragment

                        } else {
                            //error
                            hidePD();
                            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();   // We use getActivity() instead of HomeFragment.this because we are dealing with a fragment

                        }
                    }
                });
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...