Java 片段中缺少TextView数据(文本)
我在片段a中有一些EditText和textview。我使用EditText从用户那里获取值,然后根据我的公式进行计算,并在textview中显示结果 例如,Edittext A有1,Edittext B有2,我的公式是add,因此textview将结果显示为3 此外,还有一个按钮,片段a上的信息。单击此按钮,将使用以下代码显示新片段B:Java 片段中缺少TextView数据(文本),java,android,Java,Android,我在片段a中有一些EditText和textview。我使用EditText从用户那里获取值,然后根据我的公式进行计算,并在textview中显示结果 例如,Edittext A有1,Edittext B有2,我的公式是add,因此textview将结果显示为3 此外,还有一个按钮,片段a上的信息。单击此按钮,将使用以下代码显示新片段B: FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.contentFrag, fragment);
fragmentTransaction.addToBackStack(backStackStateName);
fragmentTransaction.commit();
现在,当我按下后退按钮时,我让系统调用super.onBackPressed(),以便删除当前片段B并返回片段A
我的问题是:
现在EditText保留了它们的所有值,但是我在TextView上计算和显示的值消失了
我检查了onViewStateRestored(Bundle savedInstanceState)方法,但是参数savedInstanceState为null
我的问题:
如何保存/检索文本视图的值
或
我在哪里可以再次调用用于计算文本视图数据的代码???使用SharedReferences可以解决您的问题,只需将它们保存在SharedReferences中,并在使用后清除SharedReference。要解决此问题,您需要使用一些数据层,如共享首选项或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和演示者。它也可以使用。
在开源中,您可以找到一个名为。它可以恢复您的视图状态 SharedReferences是否与savedInstanceState类似?与savedInstanceState不同savedInstanceState将在强制停止后删除数据,但SharedReferences不会删除数据,除非您卸载应用程序或清除SharedReferences。我只是android编程的初学者,我设法将您的Kotlin代码转换为Java来理解它,但我不明白您为什么要这样做两次“textView.text=SharedReference.getInt(“result\u data”,0).toString()”,而在另一个线程上也是这样?@Harshad Loya我不会这样做两次。这是不同的时刻。首先是片段视图created,然后是从回调计算的。您可以为此创建一个函数,并从此点调用它。它在一个主tread-ui更新中调用。但是callculate可以在后台线程中使用,谢谢你展示了如何使用它,我使用了这个想法,那个想法对我很有用。