Vinodh Kumar
Vinodh Kumar

Reputation: 1477

Image is displaying only once in imageview in recyclerview

Hi I am retrieving images and text from json based on values showing the view using the recycler view. All working fine if the data is less than 10 date if morethan 10 images are showing only once in the recycler view.after I scroll down and scrolled up images are disappeared.Dont know where I did mistake.

This is my code

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;

    }
     }

Upvotes: 0

Views: 98

Answers (2)

Ragesh Ramesh
Ragesh Ramesh

Reputation: 3520

RecyclerView reuses the row view. Hence your ImageView visibility once set to gone is never made visible. Just add an else to your if(image[position].equals("")) as below

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

Let me know if this works.

Upvotes: 2

justbebird
justbebird

Reputation: 13

if you change view state,make sure each if matching one else ,because convert view had remember the view state.

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

Upvotes: 0

Related Questions