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

时间:2018-06-27 20:07:14

标签: java android

我在片段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的数据?

2 个答案:

答案 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。