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)
使用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)
这是一个老问题,以上所有答案都是有效的。这是 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)
| 归档时间: |
|
| 查看次数: |
16862 次 |
| 最近记录: |