[英]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.