如何在viewpager中的fragment之间传递数据?

jso*_*der 5 android xamarin.android xamarin

有一个tabLayout和ViewPager。所以我想将数据从fragment1传递到fragment2。

注意:fragment1 与fragment2 位于VIewPager 中。所以我无法按照正常方式传递数据。

FragmentTransaction fragmentTx=this.FragmentManager.BeginTransaction();
            TracksByGenres fragTrack=new TracksByGenres();
            fragTrack.AddData(items[e.Position]);
            //get our item from listview

            fragmentTx.Replace(Resource.Id.fragmentContainer,fragTrack);    
            fragmentTx.AddToBackStack(null);
            fragmentTx.Commit();
Run Code Online (Sandbox Code Playgroud)

Vis*_*iya 7

使用sharedPreferences

SharedPreferences sharedpreferences;
public static final String MyPREFERENCES = "MyPrefs" ;
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
Run Code Online (Sandbox Code Playgroud)

节省价值

SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("TAG_NAME", "value");
editor.commit();
Run Code Online (Sandbox Code Playgroud)

从首选项中检索数据: 在第二个片段中

public static final String MyPREFERENCES = "MyPrefs" ;
SharedPreferences prefs = getSharedPreferences(MyPREFERENCES , MODE_PRIVATE); 
String restoredText = prefs.getString("TAG_NAME", null);
Run Code Online (Sandbox Code Playgroud)

  • 不建议 (2认同)

Hit*_*ahu 5

这是一个老问题,以上所有答案都是有效的。这是 2019 年,Android 自那以来发生了很大变化Android Architecture Components

在此输入图像描述

如果您使用Android JetPack,则可以在 Host Activity 类中添加观察者Live Data并监听 Fragment 类中的更改

创建一个 Singleton 存储库来保存实时数据

/**
 * Data Class Live Data
 */
class Repository private constructor() {


    private var currentProgress: MutableLiveData<Float> = MutableLiveData()

    fun getLiveProgress(): MutableLiveData<Float> {
        return currentProgress
    }

    companion object {

        private val mInstance: Repository =
                Repository()

        @Synchronized
        fun getInstance(): Repository {
            return mInstance
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Activity 或 Fragment 类的任意位置设置实时数据

  viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
                headMotionScene.progress = positionOffset
                Repository.getInstance().getLiveProgress().value = positionOffset
            }

            override fun onPageSelected(position: Int) {
            }

        })
Run Code Online (Sandbox Code Playgroud)

观察片段/服务类中数据的变化

    Repository.getInstance().getLiveProgress().observe(this, Observer<Float> {
        motionLayout.progress = it
    })
Run Code Online (Sandbox Code Playgroud)