防止每次打开活动时都要加载TextViews?

时间:2014-01-07 13:46:02

标签: android

我正在解析一个Web文件,然后在完成时设置5个textview值,但是,每次关闭活动并重新打开它时,它需要再次访问页面解析并显示值,我怎样才能阻止它至?

应该注意到数据会经常变化,所以我不能永远保存这些值。

public void gatherStockDetails(String symb) {
    AsyncHttpClient client = new AsyncHttpClient();
    client.get("url" + symb + "&f=snpog",
            new AsyncHttpResponseHandler() {
                @Override
                public void onSuccess(String response) {
                    Log.e("KFF-a", response);
                    stockinfo = response.split(",");

                    setTextViews(stockinfo[0].replaceAll("[^a-zA-Z0-9.%+ -]+", ""),
                            stockinfo[1].replaceAll("[^a-zA-Z0-9.%+ -]+", ""),
                            stockinfo[2].replaceAll("[^a-zA-Z0-9.%+ -]+", ""),
                            stockinfo[3].replaceAll("[^a-zA-Z0-9.%+ -]+", ""),
                            stockinfo[4].replaceAll("[^a-zA-Z0-9.%+ -]+", ""));
                }

                @Override
                public void onFailure(Throwable arg0, String arg1) {
                    super.onFailure(arg0, arg1);
                }

            });
}

public void setTextViews(String Symbol, String Name, String PClose, String Open, String Low) {
        final Animation in = new AlphaAnimation(0.0f, 1.0f);
        in.setDuration(500);

        tvName.setText(Name.replace("Corpora", "Corporation"));
        tvName.startAnimation(in);

        tvSymbol.setText(Symbol);
        tvSymbol.startAnimation(in);

        tvSymbol.setText(PClose);
        tvPClose.startAnimation(in);

        tvLow.setText(Low);
        tvLow.startAnimation(in);

        tvOpen.setText(Open);
        tvOpen.startAnimation(in);
    }

很抱歉,我没有提及,这是一个活动片段,因此没有onRestoreInstance状态。

3 个答案:

答案 0 :(得分:0)

也许你应该把TextViews放在OnCreate中,这是参考图片:

Process lifespan

这显示了加载不同模块的位置,以及一个好主意是放置不需要重新加载的模块。

图片从另一个stackoverflow线程借出,此处:Difference between onCreate()and onStart()

答案 1 :(得分:0)

您可以使用 sharedPreferences 。使用布尔值表示您不希望再次解析页面并保存textView的文本。现在每次活动打开时,检查布尔值是否为真,如果是,只需从 sharedPreference 中取值并将它们分配给textViews。

如果布尔值为false,则解析页面。每当您再次解析页面时,请用新值替换旧值。这样您就不必一次又一次地解析页面。

答案 2 :(得分:0)

也许你可以在SharedPreferences中保存一些标志,这样你就可以验证标志。

public void DataDownloaded()
{
 SharedPreferences sharedPreferences = getSharedPreferences();
 SharedPreferences.Editor editor = sharedPreferences.edit();
 editor.putBoolean("DataDownloaded", true);
 editor.commit();       
}

public Boolean isDataDownloaded() 
{
 SharedPreferences sharedPreferences = getSharedPreferences();
 return sharedPreferences.getBoolean("DataDownloaded", false);
}

只是在onCreate()和onResume()覆盖方法中进行验证。

if(!isDataDownloaded)
{
//all your cool stuff
}