android - 如何将数据从一个 fragment 传递到前一个 fragment ?

标签 android

我要去 FragmentA->FragmentB。现在我想从 FragmentB 将数据传递给 FragmentA。那么我该怎么做呢??

目前正在使用 getCustomFragmentManager().popBackStack(); 进行 FragmentB->FragmentA 但不传递任何值。

最佳答案

In FragmentA

    FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
    FragmentB frgamentB = new FrgamentB();
    fragmentB.setTargetFragment(FrgamentA.this, AppConstant.FRAGMENT_CODE);
    ft.addToBackStack(fragment.getClass().getName());
    ft.add(R.id.content, fragment, tag);
    ft.commit();

Now Override onActivityResult() in FragmentA

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
      if (requestCode==AppConstant.FRAGMENT_CODE){
         int addID = data.getIntExtra("addressID", 0);
         String addressLine=data.getStringExtra("addressLine");
      }
    }
}

In FragmentB (on Click of back Button)

Intent intent = new Intent(context, FragmentB.class);
intent.putExtra("addressID", list.get(position).getId());
intent.putExtra("addressLine", list.get(position).getAddressLine1());
getTargetFragment().onActivityResult(getTargetRequestCode(), RESULT_OK, intent);
getFragmentManager().popBackStack();

在 Kotlin 中更新

FragmentExtention

fun Fragment.addFragment(fragment: Fragment,targetFragment: Fragment,requestCode: Int, isAddToBackStack: Boolean = false, init: Bundle.() -> Unit = {}) {
    requireFragmentManager().inTransaction {
        val bundle = Bundle()
        bundle.init()
        fragment.arguments = bundle
        setTargetFragment(targetFragment,requestCode)
        if (isAddToBackStack) {
            addToBackStack(fragment::class.java.simpleName)
        }
        add(R.id.content, fragment, fragment::class.java.simpleName)
    }
}


inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> Unit) {
        val fragmentTransaction = beginTransaction()
        fragmentTransaction.func()
        fragmentTransaction.commit()
    }

fun Fragment.removeFragment(fragment: Fragment, enter: Int = 0, exit: Int = 0) {
    requireFragmentManager().inTransaction {
        remove(fragment)
    }
}

In FragmentA

addFragment(FrgamentB(),this,AppConstant.FRAGMENT_CODE,true)

Now Override onActivityResult() in FragmentA

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == FRAGMENT_CODE && resultCode == Activity.RESULT_OK) {
            val addID = data?.getIntExtra("addressID", 0)
            val addressLine = data?.getStringExtra("addressLine")
        }
 }

In FragmentB (on Click of back Button)

val intent = Intent(context, FragmentB::class.java)
intent.putExtra("addressID", list.get(position).getId()) 
intent.putExtra("addressLine",list.get(position).getAddressLine1())                
targetFragment.onActivityResult(targetRequestCode,RESULT_OK, intent)
fragmentManager.popBackStack()

关于android - 如何将数据从一个 fragment 传递到前一个 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085608/

相关文章:

java - 在哪里可以下载 JDK 1.6u20 64 位?

java - 我们如何在 UrlEncodedFormEntity 中传递 HashMap 参数?

android - Android:播放新歌曲之前先停止播放歌曲。

android - getZoom 和 getVisibleBounds 方法永远不会在 @mapbox/react-native-mapbox-gl Android 中解析

java - Android Bundle putStringArray 不工作

android - 需要在 android 解锁屏幕之前运行我的应用程序

android - 如何在Android 中使用Alarm Manager 进行生日提醒?从 SQLite 数据库读取日期

Android: 查看 onDraw 从未调用过

java - MobileFirst 8.0 安全认证的 APPLICATION_DOES_NOT_EXIST?

android - 从移动应用程序到计算机的数据传输