【问题标题】:How to save and restore NetworkImageView and Textview on configuration change如何在配置更改时保存和恢复 NetworkImageView 和 Textview
【发布时间】:2016-08-08 19:00:31
【问题描述】:

我正在使用 volley 从 Web 获取数据并在 TextViews 和 NetworkImageView 中显示结果。

我已成功保存和恢复文本视图的状态,但我遇到了 NetworkImageView 的问题。

水果详情

public class FruitDetails extends AppCompatActivity {

    private final String TAG = "FruitDetails";


    TextView fruitTitle, fruitContent;
    NetworkImageView authorImg;
    ImageLoader AuthImgLoader;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fruit_details);

        fruitTitle = (TextView) findViewById(R.id.dfruit_title);
        fruitContent = (TextView) findViewById(R.id.dfruit_content);
        authorImg = (NetworkImageView) findViewById(R.id.author_img);

        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        if (savedInstanceState != null) {
            fruitTitle.setText(savedInstanceState.getString("fruitTitle"));
            fruitContent.setText(savedInstanceState.getString("fruitContent"));
        } else {

                loadFruit();

        }
    }

    private void loadFruit() {
        Log.d(TAG, "loadFruit called");

        final ProgressBar progressBar;
        progressBar = (ProgressBar) findViewById(R.id.progress_circle);
        progressBar.setVisibility(View.VISIBLE);


        int news_id = getIntent().getIntExtra("FruitId", -1);
        Log.d(TAG, "You clicked fruit id " + fruits_id);

        final JsonObjectRequest jsonObjReq = new JsonObjectRequest( DetailConfig.GET_DURL + news_id, null,


                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.d("Debug", response.toString());

                        //Dismissing progressbar;
                        if (progressBar != null) {
                            progressBar.setVisibility(View.GONE);
                        }

                        //Calling method to parse json array
                        parseFruit(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d("", "Error: " + error.getMessage());
                    }
                });

        //Creating request queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to queue
        requestQueue.add(jsonObjReq);
    }

    //This method will parse json data of fruit
    private void parseFruit(JSONObject jsonObject) {

        Log.d(TAG, "Parsing fruit array");


            try {
                String title = jsonObject.getString(DetailConfig.TAG_DFRUIT_TITLE);
                fruitTitle.setText(Html.fromHtml(title));

                JSONObject pAuthor = jsonObject.getJSONObject("author");
                String authorimg = pAuthor.getString("avatar");

                AuthImgLoader = VolleyRequest.getInstance(getApplicationContext()).getImageLoader();
                AuthImgLoader.get(authorimg, ImageLoader.getImageListener(authorImg, R.drawable.ic_author, R.drawable.ic_author));
                authorImg.setImageUrl(authorimg, AuthImgLoader);


                String content = jsonObject.getString(DetailConfig.TAG_DFRUIT_CONTENT);
                fruitContent.setText(Html.fromHtml(content));

            } catch (JSONException w) {
                w.printStackTrace();
            }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("fruitTitle", fruitTitle.getText().toString());
        outState.putString("fruitContent", fruitContent.getText().toString());
        //outState.putInt("authorImg", authorImg // I got into problem here
    }

}

虽然我根本无法恢复 NetworkImageView 的样式,但 fruitContent 有一个异常:当我旋转屏幕时,文本的样式(例如粗体)丢失,即恢复正常。

编辑 我发现样式丢失的原因是因为我将它设置为字符串;无论如何我可以使用 Parcelables 吗?

【问题讨论】:

    标签: android android-volley networkimageview android-savedstate


    【解决方案1】:

    在 onSaveInstanceState 中将 url 保存到你的 bundle 并在 onRestoreInstanceState 中恢复它。这假设图像不需要将带有旋转的 url 更改为更合适的大小之一。

    【讨论】:

    • 那意味着要重新下载图像?正确的?我不想那样。
    • 如果你使用 Volley,你应该有一个 ImageCache 和一个 DiskCache 来防止这种情况。否则为什么要使用 Volley?
    • 网址存储在authoring,但我似乎无法在 onSaveInstanceState 中访问它
    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2011-11-02
    • 2016-05-01
    • 2013-01-27
    • 1970-01-01
    相关资源
    最近更新 更多