简体   繁体   English

android回收器视图和旋转

[英]android recycler view and rotation

im with a problem and i need some help with a recycler view, 即时通讯有问题,我需要一些有关回收商的帮助,

So i have this recycler view: 所以我有这个回收站视图: 在此处输入图片说明

But when i rotate the device, the recycler never comes back.. The thing is, im calling the async task on the onCreate method, so even if i rotate the device, the onCreate method will be called again, and repopulate the recycler view, but in this case, thats not happening. 但是,当我旋转设备时,回收站再也不会回来了。问题是,我在onCreate方法上调用了异步任务,因此即使我旋转设备,onCreate方法也会再次被调用,并重新填充回收站视图,但是在这种情况下,那没有发生。 How can i fix this? 我怎样才能解决这个问题?

When i rotate the device i get this result: 当我旋转设备时,会得到以下结果: 在此处输入图片说明

This is my activity code: 这是我的活动代码:

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);
        }

    }


}

This is my adapter code: 这是我的适配器代码:

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);

        }

    }


}

And this is my class that helps me to store the data inside a list 这是我的课程,可以帮助我将数据存储在列表中

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();
        }

    }


}

This is my json result:(its not related to the question but belogs to it so..) 这是我的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"
      }
   ]
}

Im also getting this error, when the onBindViewHolder is called: 当调用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)

Thanks for your time! 谢谢你的时间!

If your layout for portrait and landscape orientation gonna be the same, then can you please simply try by adding this line in your manifest file for your MainFeed Activity. 如果纵向和横向的布局相同,那么您可以简单地尝试在清单文件中为MainFeed活动添加此行。

android:configChanges="orientation|keyboardHidden|screenSize"

Hope this will work for you. 希望这对您有用。

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

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