Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 片段中缺少TextView数据(文本)_Java_Android - Fatal编程技术网

Java 片段中缺少TextView数据(文本)

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();

我在片段a中有一些EditText和textview。我使用EditText从用户那里获取值,然后根据我的公式进行计算,并在textview中显示结果

例如,Edittext A有1,Edittext B有2,我的公式是add,因此textview将结果显示为3

此外,还有一个按钮,片段a上的信息。单击此按钮,将使用以下代码显示新片段B:

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可以在后台线程中使用,谢谢你展示了如何使用它,我使用了这个想法,那个想法对我很有用。