2017-03-31 77 views
0

动态添加一个项目,它不会给我所需的输出,静态数据工作正常,但没有动态数据。视图有时会重复,有时它会创建空视图。Recycler视图在创建空视图的位置添加项目,不更新添加位置的数据

片段服务电话:

public void getDataFromServer() { 
     try { 
      RequestParams params = new RequestParams(); 
      String url = ApplicationConstants.GET_ITEMS; 

      if (networkClient!= null) 
       networkClient.getData(url, params, new ItemsDataListener()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    class ItemsDataListener extends ResponseHandler{ 

     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] byteResponse) { 
      try { 
       String response = new String(byteResponse); 
       if (response != null && !response.isEmpty()) {     
        Model model=new Gson().fromJson(response,Model.class); 
        mAdapter.addItem(model, 2); 

       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     @Override 
     public void onFailure(int statusCode, byte[] byteResponse) { 

     } 
    } 

这是我的适配器的方法:

public class ItemCardAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

    private Context context = null; 
    private ArrayList<Model> itemList; 


    public ItemCardAdapter(Context context) { 
     super(); 
     this.context = context; 
     this.activity = (Activity) context; 
     itemList= new ArrayList<>(); 

    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, final int viewType) { 

      View v = LayoutInflater.from(viewGroup.getContext()) 
        .inflate(R.layout.single_item_view, viewGroup, false); 
      ItemCardHolder itemCardHolder = new ItemCardHolder(v); 

      return itemCardHolder ; 
     } 
    } 

    @Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int i) { 

     (holder instanceof ItemCardHolder) { 
      Model model=itemList.get(i) 
      ((ItemCardHolder) holder).populateData(model); 
     } 
    } 

    @Override 
    public int getItemCount() { 

      return itemList.size(); 
    } 

    @Override 
    public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { 
     super.onViewDetachedFromWindow(holder); 
      ((ItemCardHolder) holder).cardview.clearAnimation(); 
    } 



    public void addItem(Model newItem, int position) { 
      itemlist.add(position, newItem); 
      this.notifyItemInserted(position); 
      this.notifyItemChanged(position); 

     } 

    public void clearData() { 
     itemList.clear(); 
     this.notifyDataSetChanged(); 
    } 

} 
+1

把你所有的代码放在这里 –

回答

0

你做错了

mAdapter.addItem(model, 2); 

它会尝试在2加入项目即使没有数据,也总能找到位置尝试从适配器获取物品计数,然后尝试添加物品。

相关问题