Android 回收器使用重复值更新

Android 回收器使用重复值更新,android,listview,android-recyclerview,Android,Listview,Android Recyclerview,我使用wipe to delete方法删除一行,当我从“回收器列表”视图中删除一行时,它会复制刚好低于我删除的一行的值。 如果我从列表中删除“测试3” 它在第3和第4位置显示“测试4”的副本 我的全部代码用于创建和删除列表,有人能帮我吗 public class fragmnetPendingAct extends Fragment { private SwipeRefreshLayout refreshLayout; private RecyclerView recycl

我使用wipe to delete方法删除一行,当我从“回收器列表”视图中删除一行时,它会复制刚好低于我删除的一行的值。 如果我从列表中删除“测试3”

它在第3和第4位置显示“测试4”的副本

我的全部代码用于创建和删除列表,有人能帮我吗

public class fragmnetPendingAct extends Fragment {

    private SwipeRefreshLayout refreshLayout;
    private RecyclerView recyclerView;

    ArrayList<String> activitynames;

    FirebaseAuth mAuth;
    View view;

    List<modelclasspendingact> modelclasspendingactList = new ArrayList<>();



    public fragmnetPendingAct() {
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_pendingactivity,container,false);

        refreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipe_activitypend);

        recyclerView = v.findViewById(R.id.recyclerviewpendingact);
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);

        recyclerView.setLayoutManager(layoutManager);


        new ItemTouchHelper(itemtouchHelpercalback).attachToRecyclerView(recyclerView);







        //listen to swipe horizontal
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {

                // Get new Instance ID token
                FirebaseUser mUser = mAuth.getInstance().getCurrentUser();
                mUser.getIdToken(true)
                        .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                            public void onComplete(@NonNull Task<GetTokenResult> task) {
                                if (task.isSuccessful()) {
                                    String token = task.getResult().getToken();
                                    // Send token to your backend via HTTPS
                                    getdatafromserver(token);

                                } else {
                                    // Handle error -> task.getException();
                                    Log.w(TAG, "getInstanceId failed second", task.getException());

                                }
                            }
                        });


                refreshitems();
            }
        });







        // Get new Instance ID token
        FirebaseUser mUser = mAuth.getInstance().getCurrentUser();
        mUser.getIdToken(true)
                .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                    public void onComplete(@NonNull Task<GetTokenResult> task) {
                        if (task.isSuccessful()) {
                            String token = task.getResult().getToken();
                            Log.d(TAG, "onComplete lead: "+token);
                            // Send token to your backend via HTTPS
                            getdatafromserver(token);

                        } else {
                            // Handle error -> task.getException();
                            Log.w(TAG, "getInstanceId failed second", task.getException());

                        }
                    }
                });




        return v;
    }






    public void getdatafromserver(String token){

        //new code using curl
        String serverurl="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, serverurl,null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            Log.d(TAG, "activity list: "+response);


                            JSONObject alldata=response.getJSONObject("payload");

                            JSONArray assetaarray=alldata.getJSONArray("activities");



                            modelclasspendingactList.removeAll(modelclasspendingactList);


                            for(int i=0;i<assetaarray.length();i++)
                            {
                              JSONObject getactivity=assetaarray.getJSONObject(i);
                              String activityid = String.valueOf(getactivity.getInt("id"));
                              String activityname = getactivity.getString("title");
                              String activitydesc = getactivity.getString("description");
                                Log.d(TAG, "activity name: "+activityname);


                                //list crreation
                                modelclasspendingactList.add(new modelclasspendingact(activityname,activitydesc,activityid));
                                pendingactAdapter adapter = new pendingactAdapter(modelclasspendingactList);
                                recyclerView.setAdapter(adapter);
                                adapter.notifyDataSetChanged();



                            }




                        }
                        catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                error.printStackTrace();

            }
        }
        ){
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> headers=new HashMap<String,String>();
                headers.put("Accept","*/*");
                headers.put("Cache-Control","no-cache");
                headers.put("cache-control","no-cache");
                headers.put("token",token);

                return headers;
            }
        };
        singletonclasshttp.getInstance(getActivity()).addtorequestque(jsonObjectRequest);



    }


    private void refreshitems()
    {

        refreshLayout.setRefreshing(false);

    }

    //swipe function
    ItemTouchHelper.SimpleCallback itemtouchHelpercalback = new ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder viewHolder1) {
            return false;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

            Log.d(TAG, "onSwiped: "+modelclasspendingactList.get(viewHolder.getAdapterPosition()).getPendid());
            Log.d(TAG, "onSwiped: position "+viewHolder.getAdapterPosition());

            String activeid = modelclasspendingactList.get(viewHolder.getAdapterPosition()).getPendid();


            // Get new Instance ID token
            FirebaseUser mUser = mAuth.getInstance().getCurrentUser();
            mUser.getIdToken(true)
                    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
                        public void onComplete(@NonNull Task<GetTokenResult> task) {
                            if (task.isSuccessful()) {
                                String token = task.getResult().getToken();
                                //send token and activity id to update function
                                markascompleted(activeid,token);


                            } else {
                                // Handle error -> task.getException();
                                Log.w(TAG, "getInstanceId failed second", task.getException());

                            }
                        }
                    });

            Log.d(TAG, "onSwiped: position "+viewHolder.getAdapterPosition());
            Log.d(TAG, "onSwiped: first list size "+modelclasspendingactList.size());


            pendingactAdapter adapter = new pendingactAdapter(modelclasspendingactList);
            modelclasspendingactList.remove(viewHolder.getAdapterPosition());
            recyclerView.removeViewAt(viewHolder.getAdapterPosition());
            adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
//            adapter.notifyItemRangeChanged(viewHolder.getAdapterPosition(), modelclasspendingactList.size());
//            adapter.notifyDataSetChanged();
            Log.d(TAG, "onSwiped: list size "+modelclasspendingactList.size());



//            pendingactAdapter adapter = new pendingactAdapter(modelclasspendingactList);
//            modelclasspendingactList.remove(viewHolder.getAdapterPosition());
//            adapter.notifyItemRemoved(viewHolder.getAdapterPosition());


        }
    };





    private void markascompleted(String activeid,String token)
    {
        //send data to server
        //curl function

        String serverurl="xxxxxxxxxxxxxxxxxxxxxxx";

        Map<String, Object> jsonParams = new ArrayMap<>();
        jsonParams.put("id", activeid);
        jsonParams.put("activityStatus", "COMPLETED");
        jsonParams.put("targetEmployeeId", "1001");
        jsonParams.put("score", "1");



        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.PUT, serverurl,new JSONObject(jsonParams),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {

                        Log.d(TAG, "response: "+response);


                        try {
                            if (response.optBoolean("success")==true)
                            {

                                Toast.makeText(getActivity(), response.getString("message"),Toast.LENGTH_LONG).show();

                            }
                            else
                            {

                                Toast.makeText(getActivity(),"Data Not Updated",Toast.LENGTH_LONG).show();
                            }

                        } catch (JSONException e) {
                            Toast.makeText(getActivity(),"Data Not Updated",Toast.LENGTH_LONG).show();
                            e.printStackTrace();
                        }

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

                Toast.makeText(getActivity(),"Data Not Saved",Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        }
        ){

            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> headers=new HashMap<String,String>();
                headers.put("Accept","*/*");
                headers.put("Cache-Control","no-cache");
                headers.put("Connection","keep-alive");
                headers.put("Content-Type","application/json");
                headers.put("cache-control","no-cache");
                headers.put("token",token);
                return headers;
            }
        };

        singletonclasshttp.getInstance(getActivity()).addtorequestque(jsonObjectRequest);

    }

}
公共类fragmnetPendingAct扩展片段{
私人交换机布局刷新布局;
私人回收站;
ArrayList活动名称;
FirebaseAuth mAuth;
视图;
List modelclasspendingactList=new ArrayList();
公共fragmnetPendingAct(){
}
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图v=充气机。充气(右侧布局。碎片悬而未决活动,容器,错误);
refreshLayout=(SwipeRefreshLayout)v.findViewById(R.id.swipe_ActivityEnd);
recyclerView=v.findViewById(R.id.recyclerviewpendingact);
LinearLayoutManager布局管理器=新的LinearLayoutManager(getActivity());
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
新的ItemTouchHelper(ItemTouchHelperCallback).attachToRecyclerView(recyclerView);
//听一听横扫
refreshLayout.setOnRefreshListener(新的SwipeRefreshLayout.OnRefreshListener(){
@凌驾
公共void onRefresh(){
//获取新实例ID令牌
FirebaseUser mUser=mAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串标记=task.getResult().getToken();
//通过HTTPS将令牌发送到后端
getdatafromserver(令牌);
}否则{
//Handle error->task.getException();
w(标记“getInstanceId第二次失败”,task.getException());
}
}
});
刷新项目();
}
});
//获取新实例ID令牌
FirebaseUser mUser=mAuth.getInstance().getCurrentUser();
mUser.getIdToken(真)
.addOnCompleteListener(新的OnCompleteListener(){
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
字符串标记=task.getResult().getToken();
日志d(标签“未完成线索:”+标记);
//通过HTTPS将令牌发送到后端
getdatafromserver(令牌);
}否则{
//Handle error->task.getException();
w(标记“getInstanceId第二次失败”,task.getException());
}
}
});
返回v;
}
public void getdatafromserver(字符串令牌){
//使用curl的新代码
字符串serverurl=“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”;
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.GET,serverurl,null,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
Log.d(标签,“活动列表:”+响应);
JSONObject alldata=response.getJSONObject(“有效负载”);
JSONArray assetarray=alldata.getJSONArray(“活动”);
removeAll(modelclasspendingactList);
for(int i=0;i task.getException();
w(标记“getInstanceId第二次失败”,task.getException());
}
}
});
Log.d(标记“onsweed:position”+viewHolder.getAdapterPosition());
Log.d(标记“onswaped:first list size”+modelclasspendingactList.size());
PendingAtadapter适配器=新的PendingAtadapter(ModelClassPendingAtList);
移除(viewHolder.getAdapterPosition());
removeViewAt(viewHolder.getAdapterPosition());
notifyItemRemoved(viewHolder.getAdapterPosition());
//notifyItemRangeChanged(viewHolder.getAdapterPosition(),modelclasspendingactList.size());
//adapter.notifyDataSetChanged();
Log.d(标记“onswaped:list size”+modelclasspendingactList.size());
//PendingAtadapter适配器=新的PendingAtadapter(ModelClassPendingAtList);
//移除(viewHolder.getAdapterPosition());
//notifyItemRemoved(viewHolder.getAdapterPosition());
}
};
私有无效标记已完成(字符串activeid、字符串标记)
{
//向服务器发送数据
//旋度函数
字符串serverurl=“xxxxxxxxxxxxxxxxxxxx”;
Map jsonParams=newarraymap();
jsonParams.put(“id”,activeid);
jsonParams.put(“活动状态”、“完成”);
jsonParams.put(“targetEmployeeId”、“1001”);
jsonParams.put(“分数”、“1”);
JsonObjectRequest JsonObjectRequest=新的JsonObjectRequest(Request.Method.PUT、serverurl、新的JSONObject(jsonParams),
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObj
pendingactAdapter adapter = new pendingactAdapter(modelclasspendingactList);
RecyclerView recyclerView = view.findViewById(R.id.my_recycler_view);
recyclerView.adapter = adapter;
recyclerView.layoutManager = LinearLayoutManager(getActivity());
 modelclasspendingactList.remove(viewHolder.getAdapterPosition());
 adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
pendingactAdapter adapter = new pendingactAdapter(modelclasspendingactList);
modelclasspendingactList.remove(viewHolder.getAdapterPosition());