Android 如何在配置更改时保存和恢复NetworkImageView和Textview

Android 如何在配置更改时保存和恢复NetworkImageView和Textview,android,android-volley,networkimageview,android-savedstate,Android,Android Volley,Networkimageview,Android Savedstate,我正在使用截取从web获取数据,并在TextView和NetworkImageView中显示结果 我已成功保存和恢复TextView的状态,但NetworkImageView出现问题 详细信息 public class FruitDetails extends AppCompatActivity { private final String TAG = "FruitDetails"; TextView fruitTitle, fruitContent; Networ

我正在使用截取从web获取数据,并在TextView和NetworkImageView中显示结果

我已成功保存和恢复TextView的状态,但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
    }

}
公共类详细信息扩展了AppCompative活动{
私有最终字符串标记=“水果详情”;
TextView水果标题、水果内容;
网络图像视图;
图像加载器AuthImgLoader;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(右布局、活动和细节);
水果标题=(TextView)findViewById(R.id.dfruit_标题);
水果内容=(TextView)findViewById(R.id.dfruit_内容);
authorImg=(NetworkImageView)findViewById(R.id.author\u img);
ActionBar ActionBar=getSupportActionBar();
if(actionBar!=null){
actionBar.setDisplayHomeAsUpEnabled(true);
}
如果(savedInstanceState!=null){
setText(savedInstanceState.getString(“水果标题”);
setText(savedInstanceState.getString(“水果内容”);
}否则{
荷包果();
}
}
私家车{
Log.d(标签“称为荷叶果”);
最终进度条进度条;
progressBar=(progressBar)findViewById(R.id.progress\u circle);
progressBar.setVisibility(View.VISIBLE);
int news_id=getIntent();
Log.d(标记“您点击了水果id”+水果id);
final JsonObjectRequest JSONObjectReq=新JsonObjectRequest(DetailConfig.GET\u DURL+news\u id,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
Log.d(“Debug”,response.toString());
//解雇progressbar;
if(progressBar!=null){
progressBar.setVisibility(View.GONE);
}
//调用方法来解析json数组
(反应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
VolleyLog.d(“,”错误:“+Error.getMessage());
}
});
//创建请求队列
RequestQueue RequestQueue=Volley.newRequestQueue(this);
//将请求添加到队列
add(jsonObjReq);
}
//此方法将解析水果的json数据
私有对象(JSONObject JSONObject){
d(标签,“解析水果数组”);
试一试{
String title=jsonObject.getString(DetailConfig.TAG\u DFRUIT\u title);
setText(Html.fromHtml(title));
JSONObject pautor=JSONObject.getJSONObject(“作者”);
String authorimg=pautor.getString(“化身”);
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\u DFRUIT\u content);
setText(Html.fromHtml(content));
}捕获(JSONException w){
w、 printStackTrace();
}
}
@凌驾
SaveInstanceState上受保护的无效(束超出状态){
super.onSaveInstanceState(超出状态);
outState.putString(“fruitTitle”,fruitTitle.getText().toString());
outState.putString(“fruitContent”,fruitContent.getText().toString());
//outState.putInt(“authorImg”,authorImg//)我在这里遇到了问题
}
}
虽然我根本无法恢复NetworkImageView的样式,但
水果内容
有一个异常:当我旋转屏幕时,文本的样式(例如粗体)丢失,即恢复正常

编辑
我发现样式丢失的原因是因为我将其设置为字符串;我是否可以使用Parcelables?

将url保存到onSaveInstanceState中的捆绑包中,并将其还原为onRestoreInstanceState。这假设图像不需要将url旋转为更合适的大小。

t意味着图像将被重新下载?对吗?我不希望这样。如果你使用Volley,你应该有一个ImageCache和一个DiskCache来防止这种情况。否则为什么要使用Volley?url存储在
创作
中,但我似乎无法在onSaveInstanceState中访问它