繁体   English   中英

DialogFragment 与 Fragment 之间的通信

[英]Communication Between DialogFragment and Fragment

我正在尝试将信息从我的警报对话框传递到我的第二个片段(我正在使用选项卡式活动布局)。

当我点击我的 ImageView 时,我想将信息从警报对话框传递到片段,但我的应用程序一直崩溃,直到我在 MainActivity.java 中实现我的界面。 我的主要任务是打开包含多个按钮的警报对话框。当我单击第一个按钮时,我想打印“Test br 3”,但它在我的 Fragment 中不起作用,它只能在我的 MainActivity.java 中工作,其中方法打印“Test br 2"。

我的主要活动

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");
    }

我的片段

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");
    }

我的警报对话框

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");
        }
    }
}

我在 show() 调用中更改了 getChildFragmentManager() 而不是 getFragmentManager() 。 第二件事是 onAttach() 到 listener = (DataTransfer) getParentFragment(); 而不是上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM