当前位置: 首页 > 知识库问答 >
问题:

如何从DialogFragment中的片段中获取数据?

钱焕
2023-03-14

我有一个DialogFragment,它使用FragmentPagerAdapter来显示选项卡。每个选项卡都有一个使用RecyclerView的不同片段。我可以获取单击后传递给片段的项目,但如何才能将数据从片段获取到DialogFragment,以便将其传递给调用活动?

TabDialog扩展DialogFraank:

public class TabDialog extends DialogFragment {

public interface OnCompleteListener{
    void onCompleteListener(String test);
}

private OnCompleteListener mListener;

TabLayout tabLayout;
ViewPager viewPager;
FragmentTabPositive tabPositive = new FragmentTabPositive();
FragmentTabNegative tabNegative = new FragmentTabNegative();
TabAdapter adapter;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    getDialog().setCanceledOnTouchOutside(true);
    View rootView = inflater.inflate(R.layout.dialog_layout, container, false);
    tabLayout = (TabLayout) rootView.findViewById(R.id.tabLayout1);
    viewPager = (ViewPager) rootView.findViewById(R.id.masterViewPager);
    adapter = new TabAdapter(getChildFragmentManager());
    adapter.addFragment("Positive", tabPositive);
    adapter.addFragment("Negative", tabNegative);
    viewPager.setAdapter(adapter);
    tabLayout.setupWithViewPager(viewPager);

    return rootView;
}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try{
        this.mListener = (OnCompleteListener)context;
    } catch(ClassCastException e){
        throw new ClassCastException(context.toString() +
                " must Implement OnCompleteListener");
    }

}

TabAdapter扩展了FragmentPagerAdapter

public class TabAdapter extends FragmentPagerAdapter {

List<Fragment> mFragmentCollection = new ArrayList<>();
List<String> mTitleCollection = new ArrayList<>();

public TabAdapter(FragmentManager fm){
    super(fm);
}

public void addFragment(String title, Fragment fragment){

    mTitleCollection.add(title);
    mFragmentCollection.add(fragment);
}

@Override
public CharSequence getPageTitle(int position){
    return mTitleCollection.get(position);
}

@Override
public int getCount(){
    return mFragmentCollection.size();
}

@Override
public Fragment getItem(int position) {
    return mFragmentCollection.get(position);
}

在FragmentTabPos中的onCreateView内部

popupAdapter = new PopupAdapter(view.getContext(), list);
    recyclerView.setAdapter(popupAdapter);

    popupAdapter.setmListener(new PopupAdapter.OnPointClickedListener() {
        @Override
        public void OnItemClicked(String test) {
            //This works
            Toast.makeText(FragmentTabPositive.this.getContext(), test + " Inside FragTabPos", Toast.LENGTH_LONG).show();
        }
    });

共有2个答案

汪高岑
2023-03-14

已解决:必须在片段中实现我自己的侦听器,并在DialogFraank中触发它。从那里,我使用OnCompleteListener将数据传递回调用的active。

仰雅昶
2023-03-14

为了避免片段之间过于紧密的耦合,我个人会选择使用新的体系结构组件来传输数据。

您可以使用AndroidViewModel来传递您的数据。

以下是Android开发者网站上的介绍:https://developer.android.com/topic/libraries/architecture/index.html

或者,您可以使用事件总线将数据从一个片段发布到其父片段。

一个这样的库:https://github.com/greenrobot/EventBus

使用架构组件的好处是它遵循了谷歌最新的应用程序设计标准。

 类似资料:
  • 想象一下,我有FragmentA,我从它开始DialogFraank(框中有)。如何将中的值取回FragmentA?我尝试制作这样的东西,但我没有成功。

  • 我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2

  • 我在Android开发者网站http://developer.Android.com/training/animation/screen-slide.html上学习这个教程 我的情况是...

  • 我正在尝试通过将数据与接口传递给片段来将数据从对话片段获取到片段。到目前为止,我知道首先是因为它的片段,我需要在MainActive上实现接口,并从那里将数据发送到我想要的任何片段。我明白,但我不知道如何做到这一点。到目前为止,我已经在MainActive中实现了接口,我正在获取数据,但我不知道如何将其发送到片段。 主要活动 对话片段-此对话片段从画廊/相机获取图片 片段-此片段应从dialogf

  • 我正在尝试创建searchdate。我在这里做的是 下面是 所以首先,我打开,它是一个片段。然后单击(编辑文本)后,它将显示(DatePickerFragment)。显示没有问题,也没有错误。 我的问题是,我怎么能设置值后,我选择日期从我的?

  • 我目前正在一个单一的活动应用程序中工作,该应用程序为每个屏幕使用片段。我也在使用MVP设计模式。 上下文 我有一个片段(Fragment-a),其中有一个项目列表。此片段处理每个项的操作。因为它可以访问演示者 我想要什么? 如何将Frainsion-A作为侦听器传递给DialogFraank(Frainsion-B),以便我可以从DialogFraank调用操作?