Android 使用list.add(0,arrayObj)时覆盖元素,以在arraylist中添加顶部的最后一项
我正在使用recyclerview显示一些服务器数据,它将在顶部显示更新的数据,为了更新列表,我在每次15秒后调用一个方法,第一次请求服务器时,它工作正常,但在那之后,当我用服务器数据更新列表时,每次15秒,试图将新项添加到顶部并显示,它工作不正常,更具体的问题是,最后一项是pic,更新的数据是文本,合并到输出中 看图片。最后一项是webadeal图片,当我用数据更新列表时,“测试”将其合并到UI中 这是我的密码: 片段:Android 使用list.add(0,arrayObj)时覆盖元素,以在arraylist中添加顶部的最后一项,android,android-recyclerview,Android,Android Recyclerview,我正在使用recyclerview显示一些服务器数据,它将在顶部显示更新的数据,为了更新列表,我在每次15秒后调用一个方法,第一次请求服务器时,它工作正常,但在那之后,当我用服务器数据更新列表时,每次15秒,试图将新项添加到顶部并显示,它工作不正常,更具体的问题是,最后一项是pic,更新的数据是文本,合并到输出中 看图片。最后一项是webadeal图片,当我用数据更新列表时,“测试”将其合并到UI中 这是我的密码: 片段: oncreateview(){ //adapter ini
oncreateview(){
//adapter initialization
linearLayoutManager=new LinearLayoutManager(context_newsfeed);
recyclerView.setLayoutManager(linearLayoutManager);
newsFeedAdapter = new NewsFeedAdapter(newsFeedClassArrayList, context_newsfeed);
recyclerView.setAdapter(newsFeedAdapter);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(context_newsfeed, linearLayoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
if (WebViewActivity.getScrollPosition() != null) {
recyclerView.scrollToPosition(Integer.valueOf(WebViewActivity.getScrollPosition()));
}
}
//below are two method. first is called for once which working well but second is for 15 sec each.
void updateNewsFeed(){
// newsFeedClassArrayList=new ArrayList<>();
postId_ArrayList=new ArrayList<>();
// allArrayList=new ArrayList<>();
try {
newsFeedQuery= URLEncoder.encode("userId","UTF-8")+"="+URLEncoder.encode(ServiceClass.getDefaults("USERID",context_newsfeed),"UTF-8")
+ "&" + URLEncoder.encode("updatePostId","UTF-8")+"="+ URLEncoder.encode(lastPostId,"UTF-8");
if(asyncTaskClass==null || asyncTaskClass.getStatus()== AsyncTask.Status.FINISHED) {
asyncTaskClass = new AsyncTaskClass(context_newsfeed, new AsyncTaskResult() {
@Override
public void AsyncTaskResult(String result) throws JSONException {
Log.v("ResDUpdate", result);
swipeRefreshLayout.setRefreshing(false);
JSONObject jsonObject = new JSONObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("result");
if (jsonArray.length() > 0){
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject tmpjsonObject = new JSONObject(jsonArray.optString(i));
newsFeedClass_updated = new NewsFeedClass();
if (tmpjsonObject.getString("funpage").equals("1")) {
newsFeedClass_updated.setUserId_friends(tmpjsonObject.getString("user_id"));
newsFeedClass_updated.setPostId(tmpjsonObject.getString("id"));
/*if(postId==(null) || postId.equals("")|| Integer.valueOf(postId)<Integer.valueOf(tmpjsonObject.getString("id")))
{
ServiceClass.setDefaults("postId",tmpjsonObject.getString("id"),context_newsfeed);
}*/
// make post id arrayList
ContactListClass contactListClass_postId = new ContactListClass();
contactListClass_postId.setContactName(tmpjsonObject.getString("id")); //post id
contactListClass_postId.setContactNumber(String.valueOf(i)); //index no
postId_ArrayList.add(contactListClass_postId);
//updated post id
if (Integer.valueOf(tmpjsonObject.getString("id")) > Integer.valueOf(lastPostId)) {
lastPostId = tmpjsonObject.getString("id");
}
newsFeedClass_updated.setUserPicUrl_newsFeed(tmpjsonObject.getString("profile_pic"));
newsFeedClass_updated.setUserProName(tmpjsonObject.getString("author_name"));
newsFeedClass_updated.setStatus(tmpjsonObject.getString("post_content"));
newsFeedClass_updated.setLikeCount(tmpjsonObject.getString("post_likes"));
newsFeedClass_updated.setWowCount(tmpjsonObject.getString("post_wows"));
newsFeedClass_updated.setBlehCount(tmpjsonObject.getString("post_blehs"));
newsFeedClass_updated.setDislikeCount(tmpjsonObject.getString("post_dislikes"));
newsFeedClass_updated.setTimeStamp(tmpjsonObject.getString("post_time"));
newsFeedClass_updated.setVideo("");
newsFeedClass_updated.setYoutubeVideo("");
newsFeedClass_updated.setIsSharedValue(tmpjsonObject.getString("is_shared"));
newsFeedClass_updated.setIsFriend(tmpjsonObject.getString("is_by_friend"));
//post attachment // here image if more than one
imageList_FunPost = new ArrayList<>();
if (tmpjsonObject.getJSONArray("attachments").length() > 0) {
JSONArray jsonArray_attachment = tmpjsonObject.getJSONArray("attachments");
for (int i_attachment = 0; i_attachment < jsonArray_attachment.length(); i_attachment++) {
JSONObject jsonObject_attachment = new JSONObject(jsonArray_attachment.optString(i_attachment));
ContactListClass contactListClass = new ContactListClass();
contactListClass.setContactName(InfoSetClass.getBaseUrl() + jsonObject_attachment.getString("file_path"));// post picture url save
contactListClass.setContactNumber((tmpjsonObject.getString("id")));
imageList_FunPost.add(contactListClass);
}
newsFeedClass_updated.setImageList(imageList_FunPost);
}
Log.v("ResDfsd","tes "+ newsFeedClassArrayList);
newsFeedClassArrayList.add(0,newsFeedClass_updated);// but as i need to show last item at top thats why i do this and prb raise.
Log.e("newsFeedClassArrayList","after adding new data from api response "+ newsFeedClassArrayList);
}
}
//that is fine, may be problem is else where
// allArrayList.addAll(newsFeedClassArrayList);
// newsFeedAdapter.swapList(newsFeedClassArrayList);
// newsFeedAdapter.notifyItemInserted(0);
newsFeedAdapter.notifyDataSetChanged();
//set list to service class
ServiceClass.setPostId_list(postId_ArrayList);
}
Log.v("ResDfsd","tesdf "+ newsFeedClassArrayList);
}
});
asyncTaskClass.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "POST", "mobileApi/getUpdatePost", newsFeedQuery);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
oncreateview(){
//适配器初始化
linearLayoutManager=新的linearLayoutManager(上下文\新闻源);
recyclerView.setLayoutManager(linearLayoutManager);
newsFeedAdapter=新的newsFeedAdapter(newsFeedClassArrayList,context_newsfeed);
recyclerView.setAdapter(newsFeedAdapter);
DividerItemDecoration DividerItemDecoration=新的DividerItemDecoration(上下文\新闻提要,linearLayoutManager.getOrientation());
回收视图。附加装饰(分割装饰);
如果(WebViewActivity.getScrollPosition()!=null){
scrollToPosition(Integer.valueOf(WebViewActivity.getScrollPosition());
}
}
//下面是两种方法。第一次调用一次,效果很好,但第二次每次调用15秒。
void updateNewsFeed(){
//newsFeedClassArrayList=新ArrayList();
postd_ArrayList=新的ArrayList();
//allArrayList=新的ArrayList();
试一试{
newsFeedQuery=URLEncoder.encode(“用户ID”、“UTF-8”)+“=”+URLEncoder.encode(ServiceClass.getDefaults(“用户ID”、上下文_新闻提要)、“UTF-8”)
+“&”+URLEncoder.encode(“updatePostId”,“UTF-8”)+“=”+URLEncoder.encode(lastPostId,“UTF-8”);
if(asyncTaskClass==null | | asyncTaskClass.getStatus()==AsyncTask.Status.FINISHED){
asyncTaskClass=新的asyncTaskClass(上下文\u新闻提要,新的AsyncTaskResult(){
@凌驾
public void AsyncTaskResult(字符串结果)引发JSONException{
Log.v(“ResDUpdate”,结果);
swipeRefreshLayout.setRefreshing(false);
JSONObject JSONObject=新JSONObject(结果);
JSONArray JSONArray=jsonObject.getJSONArray(“结果”);
if(jsonArray.length()>0){
for(int i=0;i0){
JSONArray JSONArray_attachment=tmpjsonObject.getJSONArray(“附件”);
对于(int i_attachment=0;i_attachment@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.rightArrowViewPagerId.setVisibility(View.GONE);
holder.leftArrowViewPagerId.setVisibility(View.GONE);
currentPageNo=holder.viewPager.getCurrentItem();
// mediaPlayer=new MediaPlayer();
newsFeedClass=newsFeedClassArrayList.get(position);
Picasso.with(context).load(InfoSetClass.getBaseUrl()+newsFeedClass.getUserPicUrl_newsFeed()).centerCrop().transform(new CircleTransform()).resize(50,50).into(holder.userProPicImg);
holder.userProNameTvId.setText(newsFeedClass.getUserProName());
if(newsFeedClass.getLikeCount()!=null)
totalLikeWow=Integer.valueOf(newsFeedClass.getLikeCount())+Integer.valueOf(newsFeedClass.getBlehCount()) +Integer.valueOf(newsFeedClass.getDislikeCount())+Integer.valueOf(newsFeedClass.getWowCount());
holder.likeCountTv.setText(String.valueOf(totalLikeWow));
if(newsFeedClass.getCommentCount()!=null)
holder.commentCountTv.setText(String.valueOf(newsFeedClass.getCommentCount()));
if(newsFeedClass.getShareCount()!=null){
holder.shareCountTv.setText(String.valueOf(newsFeedClass.getShareCount()));
}
if(!((newsFeedClass.getStatus().toLowerCase().contains(".jpg"))||(newsFeedClass.getStatus().toLowerCase().contains(".png"))||
(newsFeedClass.getStatus().toLowerCase().contains("https"))||(newsFeedClass.getStatus().toLowerCase().contains("http")))) {
holder.statusTv.setText(Html.fromHtml(newsFeedClass.getStatus()));
// holder.viewPager.setVisibility(View.GONE);
}
else {
holder.newsFeedImageView.loadData(newsFeedClass.getStatus(), "text/html", null);
holder.newsFeedImageView.getSettings().setJavaScriptEnabled(true);
WebSettings webSettings = holder.newsFeedImageView.getSettings();
webSettings.setGeolocationEnabled(true);
webSettings.getJavaScriptEnabled();
webSettings.getMediaPlaybackRequiresUserGesture();
// holder.viewPager.setVisibility(View.GONE);
}
//image slider
if(newsFeedClass.getImageList()!=null){
holder.viewPager.setVisibility(View.VISIBLE);
viewPagerAdapter=new ViewPagerAdapter(context,newsFeedClass.getImageList());
holder.viewPager.setAdapter(viewPagerAdapter);
if(viewPagerAdapter.getCount()>1){
holder.rightArrowViewPagerId.setVisibility(View.VISIBLE);
}
if(holder.viewPager.getCurrentItem()>1){
holder.leftArrowViewPagerId.setVisibility(View.VISIBLE);
}
if(holder.viewPager.getCurrentItem()==0){
holder.leftArrowViewPagerId.setVisibility(View.GONE);
}
if(holder.viewPager.getCurrentItem()==viewPagerAdapter.getCount()){
holder.rightArrowViewPagerId.setVisibility(View.GONE);
}
holder.rightArrowViewPagerId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(holder.viewPager.getCurrentItem()<viewPagerAdapter.getCount()){
if(holder.viewPager.getCurrentItem()<=viewPagerAdapter.getCount()){
holder.viewPager.setCurrentItem(currentPageNo++,true);
}
}
}
});
// holder.viewPagerArrowIndicator.bind(holder.viewPager);
// holder.viewPagerArrowIndicator.setArrowIndicatorRes(R.drawable.arrow_left_black_24dp,R.drawable.arrow_right_black_24dp);
viewPagerAdapter.notifyDataSetChanged();
}else {
// holder.viewPager.setVisibility(View.GONE);
relativeLayout.setVisibility(View.GONE);
}
holder.timeStampTvId.setText(newsFeedClass.getTimeStamp());
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
holder.rightArrowViewPagerId.setVisibility(View.GONE);
holder.leftArrowViewPagerId.setVisibility(View.GONE);
currentPageNo=holder.viewPager.getCurrentItem();
// mediaPlayer=new MediaPlayer();
newsFeedClass=newsFeedClassArrayList.get(position);
Picasso.with(context).load(InfoSetClass.getBaseUrl()+newsFeedClass.getUserPicUrl_newsFeed()).centerCrop().transform(new CircleTransform()).resize(50,50).into(holder.userProPicImg);
holder.userProNameTvId.setText(newsFeedClass.getUserProName());
if(newsFeedClass.getLikeCount()!=null)
totalLikeWow=Integer.valueOf(newsFeedClass.getLikeCount())+Integer.valueOf(newsFeedClass.getBlehCount()) +Integer.valueOf(newsFeedClass.getDislikeCount())+Integer.valueOf(newsFeedClass.getWowCount());
holder.likeCountTv.setText(String.valueOf(totalLikeWow));
if(newsFeedClass.getCommentCount()!=null) {
holder.commentCountTv.setText(String.valueOf(newsFeedClass.getCommentCount()));
} else {
holder.commentCountTv.setText("");
}
if(newsFeedClass.getShareCount()!=null){
holder.shareCountTv.setText(String.valueOf(newsFeedClass.getShareCount()));
} else {
holder.shareCountTv.setText("");
}
if(!((newsFeedClass.getStatus().toLowerCase().contains(".jpg"))||(newsFeedClass.getStatus().toLowerCase().contains(".png"))||
(newsFeedClass.getStatus().toLowerCase().contains("https"))||(newsFeedClass.getStatus().toLowerCase().contains("http")))) {
holder.statusTv.setText(Html.fromHtml(newsFeedClass.getStatus()));
holder.newsFeedImageView.setVisibility(View.GONE);
// holder.viewPager.setVisibility(View.GONE);
}
else {
holder.newsFeedImageView.setVisibility(View.VISIBLE);
holder.statusTv.setText("");
holder.newsFeedImageView.loadData(newsFeedClass.getStatus(), "text/html", null);
holder.newsFeedImageView.getSettings().setJavaScriptEnabled(true);
WebSettings webSettings = holder.newsFeedImageView.getSettings();
webSettings.setGeolocationEnabled(true);
webSettings.getJavaScriptEnabled();
webSettings.getMediaPlaybackRequiresUserGesture();
// holder.viewPager.setVisibility(View.GONE);
}
//image slider
if(newsFeedClass.getImageList()!=null){
relativeLayout.setVisibility(View.VISIBLE);
holder.viewPager.setVisibility(View.VISIBLE);
ViewPagerAdapter viewPagerAdapter=new ViewPagerAdapter(context,newsFeedClass.getImageList());
holder.viewPager.setAdapter(viewPagerAdapter);
if(viewPagerAdapter.getCount()>1){
holder.rightArrowViewPagerId.setVisibility(View.VISIBLE);
}
if(holder.viewPager.getCurrentItem()>1){
holder.leftArrowViewPagerId.setVisibility(View.VISIBLE);
}
if(holder.viewPager.getCurrentItem()==0){
holder.leftArrowViewPagerId.setVisibility(View.GONE);
}
if(holder.viewPager.getCurrentItem()==viewPagerAdapter.getCount()){
holder.rightArrowViewPagerId.setVisibility(View.GONE);
}
holder.rightArrowViewPagerId.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(holder.viewPager.getCurrentItem()<viewPagerAdapter.getCount()){
if(holder.viewPager.getCurrentItem()<=viewPagerAdapter.getCount()){
holder.viewPager.setCurrentItem(currentPageNo++,true);
}
}
}
});
// holder.viewPagerArrowIndicator.bind(holder.viewPager);
// holder.viewPagerArrowIndicator.setArrowIndicatorRes(R.drawable.arrow_left_black_24dp,R.drawable.arrow_right_black_24dp);
viewPagerAdapter.notifyDataSetChanged();
}else {
holder.viewPager.setVisibility(View.GONE);
relativeLayout.setVisibility(View.GONE);
}
holder.timeStampTvId.setText(newsFeedClass.getTimeStamp());
}