scrollviewandroid-drawableandroid-scrollviewcustom-listsshapedrawable

Replaced drawable images in the custom listAdapter in android changes after scrolling the listview. Why?


I use the CustomBaseAdapter to represent the list in the listView. The MainActivity is shown in the first image below in the link image which contains the custom listView adapter. And now when i click one of the items at the position number [4] the drawable images changes with filling the color as in the image second. And again when i scroll the listView the filling drawble color disappered and remains the same as in the previous state. So how can i make this happen??

Image Link to understand Clearly..

SingleRow.java

package androidhiveexample.jsonparsing.circularimageview;

import android.content.Context;

public class SingleRow {

    private String title , number ;
    private int image;
    Context context;

    public SingleRow(Context context){
        this.context = context;
    }
    public SingleRow(int image , String title , String number){
        this.title = title;
        this.image = image;
        this.number = number;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

CustomListAdapter.java

package androidhiveexample.jsonparsing.circularimageview;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;

public class CustomListAdapter extends BaseAdapter
{
    ArrayList<SingleRow> rowArrayList;
    Context context;

    public CustomListAdapter(Context context , ArrayList<SingleRow> rowArrayList)
    {
        this.context = context;
        this.rowArrayList = rowArrayList;
    }
    @Override
    public int getCount() {
        return rowArrayList.size();
    }

    @Override
    public Object getItem(int i) {
        return rowArrayList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return rowArrayList.indexOf(getItem(i));
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);

        if(convertView == null){
            convertView = inflater.inflate(R.layout.single_row_view , null);
            holder = new ViewHolder();
            holder.title = (TextView) convertView.findViewById(R.id.textView);
            holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
            holder.number = (TextView) convertView.findViewById(R.id.textViewNumber);
            convertView.setTag(holder);

        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        SingleRow singleRow = (SingleRow) getItem(position);

        holder.title.setText(singleRow.getTitle());
        holder.imageView.setImageResource(singleRow.getImage());
        holder.number.setText(singleRow.getNumber());


        return convertView;
    }

    private class ViewHolder
    {
        TextView title , number;
        ImageView imageView;
    }
}

MainActivity.java

package androidhiveexample.jsonparsing.circularimageview;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;

import java.util.ArrayList;

public class MainActivity extends ActionBarActivity
{
    ListView lv;
    String number[] = {"1" , "2" , "3" ,"4" , "5" };
    String title[] = {"Title_1_titlename" , "Title_1_titlename" , "Title_1_titlename" ,"Title_1_titlename" , "Title_1_titlename" };
    int icons[] = {R.drawable.one , R.drawable.two , R.drawable.three , R.drawable.four , R.drawable.five};
    ArrayList<SingleRow> singleRowArray = new ArrayList<>();
    SingleRow singleRow;
    static ImageView iv;
    CustomListAdapter customListAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.listView);
        loopThroughRows();
        lv.addHeaderView(getLayoutInflater().inflate(R.layout.header, null));
        customListAdapter = new CustomListAdapter(this , singleRowArray);
        lv.setAdapter(customListAdapter);

        ImageView iv1 = (ImageView) findViewById(R.id.imageViewHeader);
        iv1.setImageResource(R.drawable.new_img);

        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                position = position - 1;
                switch (position) {
                    case 0:
                        iv = (ImageView) view.findViewById(R.id.imageView);
                        // iv.setImageResource(R.drawable.one_background);
                        Log.i("IMAGEVIEW_ID", iv.toString());

                        Fragment_1 fr = new Fragment_1();
                        FragmentManager fm = getFragmentManager();
                        FragmentTransaction fragmentTransaction = fm.beginTransaction();
                        fragmentTransaction.replace(R.id.fragment_container, fr);
                        fragmentTransaction.addToBackStack(null);
                        fragmentTransaction.commit();

                        break;
                    case 1:

                        iv = (ImageView) view.findViewById(R.id.imageView);
                        iv.setImageResource(R.drawable.two_background);

                        break;
                    case 2:

                        iv = (ImageView) view.findViewById(R.id.imageView);
                        iv.setImageResource(R.drawable.three_background);

                        break;
                    case 3:

                        iv = (ImageView) view.findViewById(R.id.imageView);
                        iv.setImageResource(R.drawable.four_background);

                        break;
                    case 4:

                        iv = (ImageView) view.findViewById(R.id.imageView);
                        iv.setImageResource(R.drawable.five_background);


                        break;
                }
            }
        });
    }
    public void loopThroughRows(){
        for(int i = 0 ; i < title.length ; i++){
            singleRow = new SingleRow(icons[i] , title[i] , number[i]);
            singleRowArray.add(singleRow);
        }
    }

    @Override
    public void onBackPressed() {
        FragmentManager fm = getFragmentManager();
        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();
        } else {
            super.onBackPressed();
        }
    }
}

drawable/one.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    android:thickness="5dp"
    android:useLevel="false"
    >

    <size
        android:height="50dp"
        android:width="50dp"/>

    <solid android:color="#64DD17" />

</shape>

Solution

  • OMG finally solved after 8 days of HANGUP. Thank for #AMD for helping me to solve this issue..

    SingleRow.java

        private String title , number ;
        private int defaultImage ;
        private boolean isClicked;
        Context context;
    
        public SingleRow(Context context){
            this.context = context;
        }
    
        public SingleRow(int defaultImage , String title , String number)
        {
            this.defaultImage = defaultImage;
            this.title = title;
            this.number = number;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getNumber() {
            return number;
        }
    
        public void setNumber(String number) {
            this.number = number;
        }
    
        public int getDefaultImage() {
            return defaultImage;
        }
    
        public void setDefaultImage(int defaultImage) {
            this.defaultImage = defaultImage;
        }
    
        public boolean isClicked() {
            return isClicked;
        }
    
        public void setClicked(boolean isClicked) {
            this.isClicked = isClicked;
        }
    

    CustomAdapter.java

    public View getView(int position, View convertView, ViewGroup parent) {
            Log.i(TAG , "getView MethodofCustomListAdapter");
            ViewHolder holder = null;
            inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
    
            if(convertView == null){
                convertView = inflater.inflate(R.layout.single_row_view , null);
                holder = new ViewHolder();
                holder.icon = (ImageView) convertView.findViewById(R.id.imageViewIcon);
                holder.title = (TextView) convertView.findViewById(R.id.textViewTitle);
                holder.number = (TextView) convertView.findViewById(R.id.textViewNumber);
                convertView.setTag(holder);
            }else{
                holder = (ViewHolder) convertView.getTag();
            }
            holder.title.setText(arrayList.get(position).getTitle());
            holder.number.setText(arrayList.get(position).getNumber());
            holder.icon.setImageResource(arrayList.get(position).getDefaultImage());
    
    
            if(arrayList.get(0).isClicked()) {
                if(position == 0) {
                    holder.icon.setImageResource(R.drawable.one_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(1).isClicked()) {
                if(position == 1) {
                    holder.icon.setImageResource(R.drawable.two_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(2).isClicked()) {
                if(position == 2) {
                    holder.icon.setImageResource(R.drawable.three_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(3).isClicked()) {
                if(position == 3) {
                    holder.icon.setImageResource(R.drawable.four_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(4).isClicked()) {
                if(position == 4) {
                    holder.icon.setImageResource(R.drawable.five_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(5).isClicked()) {
                if(position == 5) {
                    holder.icon.setImageResource(R.drawable.one_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(6).isClicked()) {
                if(position == 6) {
                    holder.icon.setImageResource(R.drawable.two_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(7).isClicked()) {
                if(position == 7) {
                    holder.icon.setImageResource(R.drawable.three_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
            if(arrayList.get(8).isClicked()) {
                if(position == 8) {
                    holder.icon.setImageResource(R.drawable.four_background);
                }
                Log.i("POSITION_CLICKED" , String.valueOf(position));
            }
    
    
            return convertView;
        }
    

    MainActivity.java

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                Log.i(TAG , "onItemClickListener");
                switch (position){
                    case 0:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 1:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 2:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 3:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 4:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 5:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 6:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 7:
                        arrayList.get(position).setClicked(true);
                        break;
                    case 8:
                        arrayList.get(position).setClicked(true);
                        break;
                }
            }
        });
        customListAdapter.notifyDataSetChanged();