【问题标题】:how to implement dialogfragment in fragment?如何在片段中实现对话片段?
【发布时间】:2017-09-17 18:08:14
【问题描述】:

我有一个关于 dialogfragment 的问题 - 我通过教程创建了一个带有 dialogfragment 的类,但在教程中,通过按钮单击显示了 dialogfragment - 我想通过单击 MainActivity 中的片段选项卡来显示 dialogfragment - 我不能弄清楚如何.. 我有 Fragment GetItem 方法,我的代码中有空的 case 4 - 这是片段,我想通过单击它来打开 dialogfragment。有我的代码。感谢所有帮助和答案!有什么不清楚的地方见谅。。

-问题已解决(即 cmets)-我创建了新的 DialogFragment-xml 文件和 java 类-来自 guides.codepath.com/android/Using-DialogFragment#build-dialo‌​g 的代码,然后我将此代码添加到 MainActivity

 tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                super.onTabSelected(tab);
                int position = tab.getPosition();
                if (position == 4) {
                    showAlertDialog();
                }
            }
        });
    }
    private void showAlertDialog() {
        FragmentManager fm = getSupportFragmentManager();
        EditNameDialogFragment alertDialog = EditNameDialogFragment.newInstance("Some title");
        alertDialog.show(fm, "fragment_alert");
    }

【问题讨论】:

  • 为什么你不能返回一个新的 MediaFragment?

标签: java android android-fragments dialogfragment


【解决方案1】:

您可能想要检测单击了哪个选项卡并像其他任何选项卡一样显示对话框

你需要添加一个 TabLayout.OnTabSelectedListener

设置一下

tabLayout.setupWithViewPager(mViewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {
  @Override
  public void onTabSelected(TabLayout.Tab tab) {
      super.onTabSelected(tab);
      int position = tab.getPosition();
      if (position == 4) {
          // Create MediaFragment here
      } 
   }
});

【讨论】:

  • 不是ontabselected方法Fragment getItem(int position)吗?我想在案例 4 中调用该操作。但是我尝试了您的代码,但我不知道我应该在哪里添加 MediaFragment 并且 OnTabSelectedListener 被删除。位置也是红色突出显示的,我将 numTab 更改为 display_num 并且它是美好的。我想你知道方法,请看我上面的代码,也许它应该有帮助!非常感谢您的帮助和答案!
  • getItem (int position) 用于 ViewPager 适配器,您的问题是关于仅选择 TabLayout 的选项卡。案例 4 由position == 4 处理。您在 if 语句中添加片段。您可以在别处搜索如何实际显示 DialogFragment。我已经修复了变量名
  • 对我的英语和 Java 知识感到抱歉,感谢您对我的耐心和帮助。好吧,你的新代码修复得很好..我不确定我的问题是否正确,我正在尝试通过单击选项卡项打开 DialogFragment(在 MediaFragment 中编辑),或者我不知道它是如何调用的.. 只是窗口在向上工具栏上(以防我的描述不好)。所以我将您的代码添加到 onCreate 方法中,并添加了 Intent intentMF = new Intent(MainActivity.this, MediaFragment.class);开始活动(意图MF);我让案例 4 为空,但它不工作(我知道这是我的错)thx 寻求帮助
  • MediaFragment.class 是一个 Fragment 类。你不能在它上面调用startActivity,因为它不是一个活动。 guides.codepath.com/android/Using-DialogFragment#build-dialog
  • 好吧,我在上面添加了一些代码,我认为它应该看起来像这样,但是在我的 MediaFragment 中我有不同类型的代码,所以我没有 newInstance 方法,所以我不知道是什么现在要做的是,我的 (fm, "fragmen_alert") 也是红色下划线。感谢您的回答!
【解决方案2】:

见安卓example

public static class MyAlertDialogFragment extends DialogFragment {

public static MyAlertDialogFragment newInstance(int title) {
    MyAlertDialogFragment frag = new MyAlertDialogFragment();
    Bundle args = new Bundle();
    args.putInt("title", title);
    frag.setArguments(args);
    return frag;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(title)
            .setPositiveButton(R.string.alert_dialog_ok,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doPositiveClick();
                    }
                }
            )
            .setNegativeButton(R.string.alert_dialog_cancel,
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        ((FragmentAlertDialog)getActivity()).doNegativeClick();
                    }
                }
            )
            .create();
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多