简体   繁体   中英

Communication Between DialogFragment and Fragment

I am trying to pass information from my alert dialog to my second fragment (I am ussing tabbed activity layout).

I want to pass information from alert dialog to fragment when I click on my ImageView, but my app keep crashing until I implement my interface inside MainActivity.java. My main mission here is to open alert dialog wich contains several buttons.When I click first button I want to print "Test br 3" but it does not work inside my Fragment, it only works inside my MainActivity.java where method prints "Test br 2".

My Main Activity

public class MainActivity extends AppCompatActivity implements ExercisesAlertDialog.DataTransfer {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);



    }

    @Override
    public void ApplyData() {
       System.out.println("Test br 2");
    }

My Fragment

public class Frag2 extends Fragment implements ExercisesAlertDialog.DataTransfer {


      ImageView plusbtn;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.frag2, container, false);

        plusbtn = (ImageView) v.findViewById(R.id.plusbtn);


        plusbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            ExercisesDialog();
            }
        });



        return v;
    }

public void ExercisesDialog()
{
    ExercisesAlertDialog exercisesAlertDialog = new ExercisesAlertDialog();
    exercisesAlertDialog.show(getFragmentManager(), "Exercises Dialog");
}

    @Override
    public void ApplyData() {
        System.out.println("Test br 3");
    }

My Alert Dialog

public class ExercisesAlertDialog extends AppCompatDialogFragment {

    ImageButton one, two;
    private DataTransfer listener;
    public int first;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View v = inflater.inflate(R.layout.workout_custom_menu, null);
        builder.setView(v);
        builder.setTitle("Choose your Workout");
        builder.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
               dismiss();
            }
        });

        one = (ImageButton) v.findViewById(R.id.first);
        two = (ImageButton) v.findViewById(R.id.second);

one.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        first = 1;
        if(first ==1)
        {
listener.ApplyData();
        }


    }
});


        return builder.create();
    }


    public interface DataTransfer
    {
        void ApplyData();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try {
            listener = (DataTransfer) context;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(toString() + "Must implement DataTransfer");
        }
    }
}

I changed getChildFragmentManager() instead of getFragmentManager() in the show() call. Second thing is onAttach() to listener = (DataTransfer) getParentFragment(); instead of context.

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