如何将日期从适配器更新到recyclerView?

问题描述

当我发送新数据或更新信息时,如何更改回收视图?

我使用了dapter.notifyDataSetChanged();,但是它不起作用...

我尝试了更多方法,但这一切都无法更改我的回收站视图

在我的代码

 recyclerView =  view.findViewById(R.id.recyclerCoin);
        recyclerView.setHasFixedSize(true);
        layoutManager = new linearlayoutmanager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
        listCoinDiamondModel = new ArrayList<>();
        requestQueue = Volley.newRequestQueue(getActivity());
        getData();
        adapter = new CoinAdapter(listCoinDiamondModel,getActivity());
        recyclerView.setAdapter(adapter);

private void sendGift(String postUserID) {
        final String postUserIDD = postUserID;
        final String GiftAmount = this.GiftAmount.getText().toString().trim();
        final String flag = "1";
        StringRequest stringRequest = new StringRequest(Request.Method.POST,URL_GIFTCOIN,new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            String success = jsonObject.getString("success");
                            if (success.equals("1")){
                                adapter.notifyDataSetChanged();
                            }

                        } catch (JSONException e) {
                            e.printstacktrace();
                            Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                        }
                    }
                },new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(getApplicationContext(),"Error" + error.toString(),Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String,String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                //Log.d("FID",fid);
                params.put("fid",fid);
                params.put("GiftAmount",GiftAmount);
                params.put("flag",flag);
                params.put("postUserID",postUserIDD);
                params.put("uid",getID);
                return params;
            }
        };
        RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
        requestQueue.add(stringRequest);
    }


    private JsonArrayRequest getDataFromServer(int requestCount) {
        //Initializing ProgressBar
        final ProgressDialog progressDialog = new ProgressDialog(getActivity());
        progressDialog.setMessage("Load...");
        progressDialog.dismiss();
        final String GROUP_LIST = "https://example.com/aaa.PHP?flag=1&fid="+ getActivity().getIntent().getStringExtra("fid") +"&page="+requestCount;
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(GROUP_LIST,new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        parseData(response);
                        progressDialog.dismiss();
                    }
                },new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        progressDialog.dismiss();

                        Toast.makeText(getActivity(),"No More gift Available",Toast.LENGTH_SHORT).show();
                    }
                });

        //Returning the request
        return jsonArrayRequest;
    }

    //This method will get data from the web api
    private void getData() {
        requestQueue.add(getDataFromServer(requestCount));
        requestCount++;
    }

    //This method will parse json data
    private void parseData(JSONArray array) {
        for (int i = 0; i < array.length(); i++) {
            //Creating the newFeedModel object

            final CoinDiamondModel coinDiamondModel = new CoinDiamondModel();
            JSONObject json = null;
            try {
                //Getting json
                json = array.getJSONObject(i);

                String TAG_Coin = "Coin";
                String TAG_Diamond = "Diamond";
                String TAG_UserName = "UserName";
                String TAG_UserPhoto = "UserPhoto";
                String TAG_UserID = "UserID";

                //Log.d("NAME111",json.getString(json.getString(TAG_UserName)));
                coinDiamondModel.setCoin(json.getString(TAG_Coin));
                coinDiamondModel.setDiamond(json.getString(TAG_Diamond));
                coinDiamondModel.setGiftFromUserName(json.getString(TAG_UserName));
                coinDiamondModel.setGiftFromUserPhoto(json.getString(TAG_UserPhoto));
                coinDiamondModel.setGiftFromUserID(json.getString(TAG_UserID));

            } catch (JSONException e) {
                e.printstacktrace();
            }
            //Adding the newFeedModel object to the list
            listCoinDiamondModel.add(coinDiamondModel);
            //adapter.addTheCoinData(coinDiamondModel);
        }

        //Notifying the adapter that data has been added or changed
        adapter.notifyDataSetChanged();
    }

谁知道会发生什么,如何解决呢?

你能告诉我怎么办吗?

适应所有代码

public class CoinAdapter extends RecyclerView.Adapter<CoinAdapter.ViewHolder> {
    private ImageLoader imageLoader;
    private List<CoinDiamondModel> newcoinDiamondLists;
    private RequestManager glide;
    private Context context;
    SessionManager sessionManager;
    private String getID,memail;

    public CoinAdapter(List<CoinDiamondModel> newcoinDiamondLists,Context context) {
        this.newcoinDiamondLists = newcoinDiamondLists;
        this.glide = Glide.with(context);
        this.context = context;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.coinlist,parent,false);
        ViewHolder viewHolder = new ViewHolder(v);

        sessionManager = new SessionManager(getApplicationContext());
        sessionManager.checkLogin();
        HashMap<String,String> user = sessionManager.getUserDetail();
        getID = user.get(sessionManager.USERID);
        memail = user.get(sessionManager.EMAIL);

        //String gid = getIntent.getStringExtra("xxx");


        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder,int position) {
        CoinDiamondModel newCoinDiamondModel = newcoinDiamondLists.get(position);
        imageLoader = CustomVolleyRequest.getInstance(context).getimageLoader();

        holder.userName.setText(newCoinDiamondModel.getGiftFromUserName());
        holder.userID.setText(newCoinDiamondModel.getGiftFromUserID());
        holder.coinCount.setText(" x "+newCoinDiamondModel.getCoin());
        glide.load(newCoinDiamondModel.getGiftFromUserPhoto()).into(holder.userPhoto);
    }

    @Override
    public int getItemCount() {
        return newcoinDiamondLists.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        CircleImageView userPhoto;
        TextView userName,userID,coinCount;
        ImageView coinImg;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);

            userPhoto = (CircleImageView) itemView.findViewById(R.id.userPhoto);
            userName = (TextView) itemView.findViewById(R.id.userName);
            coinCount = (TextView) itemView.findViewById(R.id.coinCount);
            userID = (TextView) itemView.findViewById(R.id.userID);
            coinImg = (ImageView) itemView.findViewById(R.id.coinImg);
        }
    }

    public void addTheCoinData(CoinDiamondModel coinDiamondModel){
        if(coinDiamondModel!=null){
            newcoinDiamondLists.add(coinDiamondModel);
            notifyDataSetChanged();
        }else {
            throw new IllegalArgumentException("無資料!");
        }

    }
}

解决方法

您可以在服务器响应后再次将适配器设置为回收站视图

   public void onResponse(JSONArray response) {
                    parseData(response);
                    progressDialog.dismiss();
                    adapter = new CoinAdapter(listCoinDiamondModel,getActivity());
                    recyclerView.setAdapter(adapter);
                }

解决方案2: 在您的适配器中编写一个功能来更新您的列表 并在活动中调用函数

将此功能添加到适配器

    public void updateList(List<CoinDiamondModel> list){
    newcoinDiamondLists = list;
    notifyDataSetChanged();
     }

并在需要更新recyclerview时调用函数updateList

,

正确使用了RecyclerView初始化和notifyDataSetChanged()。由于您对RecyclerView的Adapter实现的问题还不清楚,因此,我可以提出一些建议进行检查。

  1. RecyclerView.Adapter中,通过返回列表长度(不为0),检查getItemCount()方法是否正确覆盖,如下所示:
@Override  
public int getItemCount() {  
    return listdata.length;  
}
  1. RecyclerView.Adapter中,检查onCreateViewHolder方法是否被正确的xml布局正确地覆盖,如下所示:
@Override  
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {  
    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());  
    View listItem= layoutInflater.inflate(R.layout.coin_xml_layout,parent,false);  
    ViewHolder viewHolder = new ViewHolder(listItem);  
    return viewHolder;  
}
  1. RecyclerView.Adapter中检查RecyclerView.ViewHolder类是否正确扩展 并将xml中的UI元素与适配器链接在一起,如下所示:
public static class ViewHolder extends RecyclerView.ViewHolder {  
    public TextView coinTextView;  
    public ViewHolder(View itemView) {  
        super(itemView);  
        this.coinTextView = (TextView) itemView.findViewById(R.id.coinTextView);    
    }  
}
  1. RecyclerView.Adapter中,检查onBindViewHolder方法是否被正确覆盖并正确地更新列表组件用户界面,如下所示:
  @Override  
  public void onBindViewHolder(ViewHolder holder,int position) {  
        final MyListData myListData = listdata[position];  
        holder.cointTextView.setText(listdata[position].getCoin());  
    }
  1. 使用断点进行调试,并检查listCoinDiamondModel.add(coinDiamondModel)是否在调用并且coinDiamondModel对象是否为空。
  2. RecyclerView正确放置在活动xml中,就像RecyclerView是可见的一样,它的大小足以显示列表元素。例如:
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:scrollbars="vertical"
,

您可以像这样手动更新适配器列表:(在适配器中编写此功能)

public void updateCoinAdapterList(ArrayList<listCoinDiamondModel> recyclerItemsList) {
        this.recyclerItemsList = recyclerItemsList;
        this.notifyDataSetChanged();
    }

您必须设置适配器全局变量,并在OnCreate或OnResume中对其进行初始化,然后调用

adapter.updateCoinAdapterList(listCoinDiamondModel);

列表更改时