2016-03-09 50 views
0

嗨我正在从json检索图像和文本,基于使用回收视图显示视图的值。如果数据少于10日期,所有工作都会正常,如果超过 10个图像在回收站视图中只显示一次。在向下滚动并滚动图像消失后,不知道我在哪里做错了。图像在recyclerview的imageview中只显示一次

这是我的代码

jsondata 
     "DATA":[ 
     { 
     "ID":"82", 
     "MSG":"", 
     "IMAGE":"http://14.18.19.15/data/chat_img/20160308102624439533297.jpg", 
     "TYPE":"1", 
     "STATUS":"0", 
     "DATE":"2016-03-08 10:26:24" 
     }, 
     { 
     "ID":"81", 
     "MSG":"saggergergergaskfasjdfahsdfalshdfaldfafdjkahsdfkjahlfdkjahfls", 
     "IMAGE":"", 
     "TYPE":"1", 
     "STATUS":"0", 
     "DATE":"2016-03-08 10:25:40" 
     }, 
     { 
     "ID":"80", 
     "MSG":"Hi", 
     "IMAGE":"", 
     "TYPE":"2", 
     "STATUS":"0", 
     "DATE":"2016-03-07 13:24:00" 
     },.... 
     ] 
Activity code 

     recyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); 
     context=this; 
     messege = new ArrayList<String>(); 
     date = new ArrayList<String>(); 
     image = new ArrayList<String>(); 
     getjsondata(); 
     //adapter = new RecyclerAdapter(context, stockArr); 
     //recyclerView.setAdapter(adapter); 


     // Toast.makeText(getApplicationContext(),""+stockArr.length,Toast.LENGTH_SHORT).show(); 
     System.out.print("ARRRRRRRRRRRRRRRRRRRRRRY"+stockArr); 
     recyclerView.setHasFixedSize(true); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    } 


    public void getjsondata() 
    { 
       StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

        // Toast.makeText(MainActivity.this, response, Toast.LENGTH_LONG).show(); 
         try { 
          JSONObject homeobj = new JSONObject(response); 
          JSONObject insteller = homeobj.getJSONObject("INSTELLAR"); 
          status = insteller.getString("STATUS"); 

          if(status.equals("success")) { 
           JSONArray data = insteller.getJSONArray("DATA"); 
           for(int i=0; i < data.length(); i++) { 
            JSONObject jsonObject = data.getJSONObject(i); 
            msg = jsonObject.getString("MSG").toString(); 
            img =jsonObject.getString("IMAGE").toString(); 
            dte =jsonObject.getString("DATE").toString(); 
            messege.add(msg); 
            date.add(dte); 
            image.add(img); 

           } 
           stockArr = new String[messege.size()]; 
           stockArr = messege.toArray(stockArr); 
           stockArr1 = new String[date.size()]; 
           stockArr1 = date.toArray(stockArr1); 
           stockArr2 = new String[image.size()]; 
           stockArr2 = image.toArray(stockArr2); 
           /* for(String s : stockArr) 
            System.out.println(s);*/ 
            Toast.makeText(getApplicationContext(),"TOAST SIZE"+messege.size(), Toast.LENGTH_SHORT).show(); 
           adapter = new RecyclerAdapter(context, stockArr,stockArr1,stockArr2); 
           recyclerView.setAdapter(adapter); 


          } 
          else 
          { 
           Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_LONG).show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
          Toast.makeText(MainActivity.this, "Error in Json", Toast.LENGTH_LONG).show(); 
         } 


        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show(); 
        } 
       }) { 
      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("clientid", KEY_ClientID); 
       params.put("adminid", KEY_ADMINID); 
       params.put("userid", KEY_USERID); 
       return params; 
      } 

     }; 

     RequestQueue requestQueue = Volley.newRequestQueue(this); 
     requestQueue.add(stringRequest); 
    } 


    } 

Adapter.java

public class RecyclerAdapter extends   

      RecyclerView.Adapter<RecyclerViewHolder> { 

    String name[]; 
    String image[]; 
    String date[]; 
    // String [] date={"date1","date2","date3","date4"}; 

     Context context; 
    LayoutInflater inflater; 
    public RecyclerAdapter(Context context, String[] message,String[] datee,String[] imageee) { 

     this.context=context; 
     inflater=LayoutInflater.from(context); 
     name=message; 
     date=datee; 
     image=imageee; 



    } 
    @Override 
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v=inflater.inflate(R.layout.item_list, parent, false); 
     RecyclerViewHolder viewHolder=new RecyclerViewHolder(v); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(RecyclerViewHolder holder, int position) 
    { 

     try 
     { 
       if(name[position].equals("")) { 
        for(int i = 0;i<image.length;i++) { 
         Picasso.with(context).load(image[position]).into(holder.imageView); 
         holder.imageView.setTag(holder); 
         holder.tv2.setText(date[position]); 
        } 
       } 
        if(image[position].equals("")) 
       { 
        holder.imageView.setVisibility(View.GONE); 
       holder.tv1.setText(name[position]); 
       holder.tv2.setText(date[position]); 
       } 



       // holder.tv1.setVisibility(View.GONE); 


      } catch (Exception e) { 
       e.printStackTrace(); 
      // holder.tv1.setVisibility(View.GONE); 
      // holder.imageView.setVisibility(View.GONE); 
       // holder.imageView.setTag(holder); 
      } 

    } 





    @Override 
    public int getItemCount() { 

     return name.length; 

    } 
    } 
+0

你为什么使用holder.imageView.setVisibility(View.GONE); –

+0

holder.imageView.setVisibility(View.Visible);在第一条语句上面的try语句下面添加下面这行,检查它是否有效 – Sayyaf

回答

1

RecyclerView重用行视图。因此,您的ImageView一度设置为可见的可见性永远不可见。只需添加一个到您的if(image[position].equals(""))如下

 else{ 
     holder.imageView.setVisibility(View.Visible); 
     } 

让我知道这是否工作。

+0

Thanks Ragesh it works –

+0

欢迎您随时将此标记为正确答案。 –

0

如果您更改视图状态,请确保每个匹配的都是其他视图状态,因为convert view已记住视图状态。

if(flag){ 
     view.changeState(); 
     }else{ 
     view.changeState(); 
     }