繁体   English   中英

android回收器视图和旋转

[英]android recycler view and rotation

即时通讯有问题,我需要一些有关回收商的帮助,

所以我有这个回收站视图: 在此处输入图片说明

但是,当我旋转设备时,回收站再也不会回来了。问题是,我在onCreate方法上调用了异步任务,因此即使我旋转设备,onCreate方法也会再次被调用,并重新填充回收站视图,但是在这种情况下,那没有发生。 我怎样才能解决这个问题?

当我旋转设备时,会得到以下结果: 在此处输入图片说明

这是我的活动代码:

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;;

/**
 * Created by IvoMi on 15/01/2016.
 */
public class MainFeed extends AppCompatActivity {

    private getData getData = new getData();
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;

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

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        recyclerView = (RecyclerView) findViewById(R.id.rvFeed);
        recyclerView.setHasFixedSize(false);
        recyclerView.setItemAnimator(new DefaultItemAnimator());

        linearLayoutManager = new LinearLayoutManager(MainFeed.this);
        recyclerView.setLayoutManager(linearLayoutManager);

        new fetchFeed().execute();

    }



    class fetchFeed extends AsyncTask<Void, Void, Void> {


        @Override
        protected void onPreExecute() {


        }

        @Override
        protected Void doInBackground(Void... params) {
            getData.getPosts("http://**.**.***.***:81/chefeBook/feed.php");
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            feedRecyclerAdapter feedRecyclerAdapter = new feedRecyclerAdapter(MainFeed.this, getData.resultList, "http://**.***.***.***:81/chefeBook/feedImages/");
            recyclerView.setAdapter(feedRecyclerAdapter);
        }

    }


}

这是我的适配器代码:

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.List;

/**
 * Created by IvoMi on 15/01/2016.
 */
public class feedRecyclerAdapter extends RecyclerView.Adapter<feedRecyclerAdapter.ViewHolder> {

    private List<FeedPosts> resultFeedPost;
    private LayoutInflater context;
    private String imageFolder;

    /* Constructor */
    public feedRecyclerAdapter(Context context, List<FeedPosts> resultFeedPost, String imageFolder) {

        this.context = LayoutInflater.from(context);
        this.resultFeedPost = resultFeedPost;
        this.imageFolder = imageFolder;

    }


    @Override
    public feedRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View v = context.inflate(R.layout.main_feed_item, null);
        return new ViewHolder(v);

    }

    @Override
    public void onBindViewHolder(feedRecyclerAdapter.ViewHolder holder, int position) {


        FeedPosts feedPosts = resultFeedPost.get(position);

        holder.rvTitle.setText(feedPosts.getTitle());
        holder.rvLikes.setText(feedPosts.getLikes() + " Likes");
        Picasso.with(holder.rvImage.getContext()).load(imageFolder + feedPosts.getImage()).fit().centerCrop().into(holder.rvImage);



    }

    @Override
    public int getItemCount() {
        return resultFeedPost == null ? 0 : resultFeedPost.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView rvImage;
        TextView rvTitle;
        TextView rvLikes;

        public ViewHolder(View itemView) {
            super(itemView);

            rvImage = (ImageView) itemView.findViewById(R.id.feedImage);
            rvTitle = (TextView) itemView.findViewById(R.id.feedTitle);
            rvLikes = (TextView) itemView.findViewById(R.id.feedLikes);

        }

    }


}

这是我的课程,可以帮助我将数据存储在列表中

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;


/**
 * Created by IvoMi on 15/01/2016.
 */
public class getData {

     List<FeedPosts> resultList = new ArrayList<>();
    private FeedPosts feedPosts;

    /* Constructor */
    public getData() {

    }

    public void getPosts(String mUrl) {


        StringBuilder postsResult = new StringBuilder();

        try {

            URL url = new URL(mUrl);
            InputStreamReader inputStreamReader = new InputStreamReader(url.openStream(), "UTF-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                postsResult.append(line);
            }


        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        jsonRead(postsResult.toString());

    }

    public void jsonRead(String postsResults) {

        try {

            JSONObject jsonObject = new JSONObject(postsResults);
            JSONArray jsonArray = jsonObject.getJSONArray("Posts");

            for (int i = 0; i < jsonArray.length(); i++) {

                JSONObject jsonObject1 = jsonArray.getJSONObject(i);

                feedPosts = new FeedPosts();
                feedPosts.setTitle(jsonObject1.getString("title"));
                feedPosts.setImage(jsonObject1.getString("image"));
                feedPosts.setLikes(jsonObject1.getString("likes"));
                resultList.add(feedPosts);

            }

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

    }


}

这是我的json结果:(它与问题不相关,但会这样。)

{
   "Posts":[
      {
         "id":"1",
         "author":"the guy",
         "title":"Teste",
         "image":"1.jpg",
         "likes":"100"
      },
      {
         "id":"2",
         "author":"asfas",
         "title":"dfsadfsad",
         "image":"2.jpg",
         "likes":"20"
      },
      {
         "id":"3",
         "author":"Ivo",
         "title":"fsdfsdafdsf",
         "image":"3.jpg",
         "likes":"15"
      },
      {
         "id":"4",
         "author":"fsd",
         "title":"fsdafdsf",
         "image":"4.jpg",
         "likes":"5"
      }
   ]
}

当调用onBindViewHolder时,我也收到此错误:

01-16 20:46:42.243 4500-4500/****.chefebook D/Bind view Holder: Called
01-16 20:46:42.256 4500-4500/****..chefebook D/ViewGroup: addInArray been called, this = android.support.v7.widget.RecyclerView{2ad8a20 VFED.... .F....ID 0,0-960,502 #7f0d005b app:id/rvFeed}call stack =
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup: java.lang.Throwable: addInArray
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.addInArray(ViewGroup.java:3786)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.addViewInner(ViewGroup.java:3740)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.addView(ViewGroup.java:3564)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.addView(ViewGroup.java:3509)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView$4.addView(RecyclerView.java:544)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.ChildHelper.addView(ChildHelper.java:107)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView$LayoutManager.addViewInt(RecyclerView.java:6314)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:6272)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView$LayoutManager.addView(RecyclerView.java:6260)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1385)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1160)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1888)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1742)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.LinearLayout.onLayout(LinearLayout.java:1651)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.layoutChildren(FrameLayout.java:515)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.widget.FrameLayout.onLayout(FrameLayout.java:450)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.View.layout(View.java:15141)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewGroup.layout(ViewGroup.java:4862)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2323)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2029)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1192)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6231)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:788)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.Choreographer.doCallbacks(Choreographer.java:591)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.Choreographer.doFrame(Choreographer.java:560)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:774)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.os.Handler.handleCallback(Handler.java:808)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.os.Handler.dispatchMessage(Handler.java:103)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.os.Looper.loop(Looper.java:193)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at android.app.ActivityThread.main(ActivityThread.java:5291)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at java.lang.reflect.Method.invokeNative(Native Method)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at java.lang.reflect.Method.invoke(Method.java:515)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
01-16 20:46:42.256 4500-4500/****.chefebook D/ViewGroup:     at dalvik.system.NativeStart.main(Native Method)

谢谢你的时间!

如果纵向和横向的布局相同,那么您可以简单地尝试在清单文件中为MainFeed活动添加此行。

android:configChanges="orientation|keyboardHidden|screenSize"

希望这对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM