2016-03-09 2 views
0

Привет Я получаю изображения и текст из json на основе значений, отображающих представление с использованием вида recycler. Все работает нормально, если данные меньше 10 дней, если morethan 10 изображений отображаются только один раз в представлении recycler.after я прокручиваю вниз и прокручиваются изображения исчезают. Не знаю, где я ошибся.Изображение отображается только один раз в представлении изображения в recyclerview

Это мой код

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 выше 1-го утверждения, проверьте, работает ли это – Sayyaf

ответ

1

RecyclerView повторно вид строки. Следовательно, ваша видимость ImageView, когда-либо установленная для удаления, никогда не становится видимой. Просто добавьте еще, чтобы ваши if(image[position].equals("")) ниже

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

Позвольте мне знать, если это работает.

+0

Спасибо Ragesh, он работает –

+0

Добро пожаловать и, пожалуйста, отметьте это как правильный ответ. –

0

Если вы измените состояние представления, убедитесь, что каждый из них соответствует другому, потому что в режиме просмотра было замечено состояние представления.

if(flag){ 
     view.changeState(); 
     }else{ 
     view.changeState(); 
     } 
Смежные вопросы