我在片段A中有一些编辑文本和文本视图。我使用编辑文本从用户那里获取价值,然后根据公式计算并在文本视图中显示结果。
例如Edittext A有1,Edittext B有2,我的公式已添加,因此textview将结果显示为3。
还有一个按钮,有关片段A的信息。单击此按钮后,将使用以下代码显示新的片段B:
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.contentFrag, fragment);
fragmentTransaction.addToBackStack(backStackStateName);
fragmentTransaction.commit();
现在,当我按下“后退”按钮时,我让系统调用super.onBackPressed(),以便删除当前的片段B,并取回片段A。
我的问题:
现在,编辑文本保留所有值,但是我计算并显示在TextViews上的值消失了。
我检查了onViewStateRestored(Bundle savedInstanceState)方法,但是参数saveInstanceState为空。
我的问题:
如何保存/检索文本视图的值?
OR
我在哪里可以再次调用该代码来计算textview的数据?
答案 0 :(得分:1)
要解决此问题,您需要使用某些数据层,例如“共享首选项”或“ SQL存储”。在某种原始方式下,它看起来像:
public override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
return inflater?.inflate(R.layout.fragment_blank, container, false)
//update you UI from local STORAGE on create
textView.text = sharedPreference.getInt("result_data", 0).toString()//make request local for date
//calling your calculation
button.setOnClickListener {
calculateData(dataInput, object : Callback {
override fun onCalculated() {
//update you UI from local STORAGE layer in MAIN THREAD
Handler(Looper.getMainLooper()).post {
textView.text = sharedPreference.getInt(
"result_data",0
).toString()
}
}
})
}
}
//you calculate and request to data layer
private fun calculateData(inPutData:Int, callback:Callback){
//use background for calculate It will be available.
Thread{
//calculate
val result = inPutData+ ARG_PARAM
//save result in LOCAL STORAGE
sharedPreference.edit().putInt( " result", result).apply()
//update UI
callback.onCalculated()
}.start()
}
interface Callback{
fun onCalculated()
}
还要考虑一下MVP和Presenter。也可以使用。 在开源中,您可以找到名为moxy的惊人MVP库。它可以恢复您的视图状态。
答案 1 :(得分:0)
使用SharedPreferences将解决您的问题,只需将它们保存在sharedPreferences中,并在使用后清除SharedPreference。