Home > Net >  How can i pass data from custom dialog box to Fragment in android studio using java?
How can i pass data from custom dialog box to Fragment in android studio using java?

Time:12-10

I am new to android studio and Java. I have create custom dialog box with input textbox. I want to pass data from custom dialog to fragment layout. How can I achieve that ?

I saw this post but didn't get it. Please help me out !

Passing a data from Dialog to Fragment in android

Edited

Here's my code >>

public class IncomeFragment extends Fragment{
    TextView title, textRsTotal;
    Dialog dialog;
    int total = 0;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        title = view.findViewById(R.id.totalIncomeTitle);
        Button button = view.findViewById(R.id.addIncomeBtn);
        textRsTotal = view.findViewById(R.id.totalExpenseTitle);


        dialog = new Dialog(getActivity());

        if (getActivity() != null) {
            if (!CheckInternet.isNetworkAvailable(getActivity())) {
                //show no internet connection !
            }
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.setContentView(R.layout.income_custom_dialog);
                dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
                dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);

                RadioGroup radioGroup = dialog.findViewById(R.id.radioGroup);
                Button buttonAdd = dialog.findViewById(R.id.addBtn);
                TextInputEditText editText = dialog.findViewById(R.id.editText);

                radioGroup.clearCheck();
                radioGroup.animate();
                radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
                        RadioButton radioButton = (RadioButton) radioGroup.findViewById(checkedId);
                    }
                });
                buttonAdd.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        int selectedId = radioGroup.getCheckedRadioButtonId();
                        if (selectedId == -1) {
                            Toast.makeText(getActivity(), "Please select your income type", Toast.LENGTH_SHORT).show();
                        } else {
                            RadioButton radioButton = (RadioButton) radioGroup.findViewById(selectedId);
                            String getIncome = editText.getText().toString();
                            Toast.makeText(getActivity(), radioButton.getText()   " is selected & total is Rs."  total, Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                dialog.show();

            }
        });

        super.onViewCreated(view, savedInstanceState);
    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_income, container, false);


        // Inflate the layout for this fragment
        return view;
    }
}

CodePudding user response:

There are more than one method to achieve that, the one mentioned in the url you provided is suggesting to use a simple callback to forward event and data back to the calling fragment. So the pieces you are needing are all there:

  1. Write a callback interface: public interface Callback1{ public void onInteraction(String thingToCommunicateBack); }

  2. In your fragment: and while building the instance of your dialog, pass an instance you've built of Callback1 to that dialog like this Callback1 mCallback = new Callback1() { public void onInteraction(String thingToCommunicateBack) { /*TODO receive data, handle and update layout*/ }; (the whole fragment could be that instance using the keyword this if you decide to implement the interface there instead, like this class Fragment1 extends Fragment implements Callback1 and implement its method within fragment's class after the keyword override)

  3. In your Dialog class: when the interaction (click) that should trigger the event and send data back happens, invoke callback's method like this: mCallback1.onInteraction("text from your EditText to pass")

Now, you passed some data from custom dialog back to a fragment.

CodePudding user response:

Ok, try this :

public class IncomeFragment extends Fragment {
    TextView title, textRsTotal;
    Dialog dialog;
    int total = 0;

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        title = view.findViewById(R.id.totalIncomeTitle);
        Button button = view.findViewById(R.id.addIncomeBtn);
        textRsTotal = view.findViewById(R.id.totalExpenseTitle);


        dialog = new Dialog(getActivity());

        if (getActivity() != null) {
            if (!CheckInternet.isNetworkAvailable(getActivity())) {
                //show no internet connection !
            }
        }

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showDialog(new MyCallback() {
                    @Override
                    public void setText(String text) {
                        textRsTotal.setText(text);
                    }
                });
            }
        });

        super.onViewCreated(view, savedInstanceState);
    }

    private void showDialog(MyCallback myCallback) {
        dialog.setContentView(R.layout.income_custom_dialog);
        dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
        dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);

        RadioGroup radioGroup = dialog.findViewById(R.id.radioGroup);
        Button buttonAdd = dialog.findViewById(R.id.addBtn);
        TextInputEditText editText = dialog.findViewById(R.id.editText);

        radioGroup.clearCheck();
        radioGroup.animate();
        radioGroup.setOnCheckedChangeListener((radioGroup1, checkedId) -> {
            RadioButton radioButton = (RadioButton) radioGroup1.findViewById(checkedId);
        });
        buttonAdd.setOnClickListener(view1 -> {
            int selectedId = radioGroup.getCheckedRadioButtonId();
            if (selectedId == -1) {
                Toast.makeText(getActivity(), "Please select your income type", Toast.LENGTH_SHORT).show();
            } else {
                RadioButton radioButton = (RadioButton) radioGroup.findViewById(selectedId);
                String getIncome = editText.getText().toString();
                myCallback.setText(getIncome);
                Toast.makeText(getActivity(), radioButton.getText()   " is selected & total is Rs."   total, Toast.LENGTH_SHORT).show();
            }
        });
        dialog.show();

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_income, container, false);
        return view;
    }

    public interface MyCallback {
        void setText(String text);
    }
}
  • Related