Android 使用list.add(0,arrayObj)时覆盖元素,以在arraylist中添加顶部的最后一项

Android 使用list.add(0,arrayObj)时覆盖元素,以在arraylist中添加顶部的最后一项,android,android-recyclerview,Android,Android Recyclerview,我正在使用recyclerview显示一些服务器数据,它将在顶部显示更新的数据,为了更新列表,我在每次15秒后调用一个方法,第一次请求服务器时,它工作正常,但在那之后,当我用服务器数据更新列表时,每次15秒,试图将新项添加到顶部并显示,它工作不正常,更具体的问题是,最后一项是pic,更新的数据是文本,合并到输出中 看图片。最后一项是webadeal图片,当我用数据更新列表时,“测试”将其合并到UI中 这是我的密码: 片段: oncreateview(){ //adapter ini

我正在使用recyclerview显示一些服务器数据,它将在顶部显示更新的数据,为了更新列表,我在每次15秒后调用一个方法,第一次请求服务器时,它工作正常,但在那之后,当我用服务器数据更新列表时,每次15秒,试图将新项添加到顶部并显示,它工作不正常,更具体的问题是,最后一项是pic,更新的数据是文本,合并到输出中

看图片。最后一项是webadeal图片,当我用数据更新列表时,“测试”将其合并到UI中

这是我的密码:

片段:

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


    }