0

i am trying to setVisible a play icon on click of listview item just like in music player.

I am using a custom array adapter, all is working good but when i scroll up/down and select any item on the list the previous play icon dosent go away.

But if i dont scroll and just click on the item it works perfectly fine.

OnclickListener :

    listChannels.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub


            if (oldView != null) {
                oldView.setDrawingCacheEnabled(true);
                ImageView icon = (ImageView) oldView
                        .findViewById(R.id.icon);
                icon.setImageBitmap(null);
                icon.setVisibility(ImageView.GONE);
                icon.invalidate();
            }

            oldView = arg1;
            selectedItem = arg2;
            ImageView icon = (ImageView) arg1.findViewById(R.id.icon);
            icon.setImageResource(R.drawable.play);
            icon.setVisibility(ImageView.VISIBLE);

        }
    });

Array Adapter :

private class ListArrayAdapter extends ArrayAdapter<String> {
    public ListArrayAdapter(Context context, int textViewResourceId,
            String[] arrTitle) {
        super(context, textViewResourceId, arrTitle);

        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View row = inflater.inflate(R.layout.listitem_row, parent, false);
        TextView label = (TextView) row.findViewById(R.id.station);


        ImageView imageView = (ImageView) row
                .findViewById(R.id.imageViewDisplay);


            String areaStr = feeds.get(position).getStrLocation();

            imageLoader.DisplayImage(feeds.get(position).getStrImage()
                    .toString(), activity, imageView);

            if (!areaStr.equals("")) {
                TextView area = (TextView) row.findViewById(R.id.area);
                area.setText(areaStr);
                area.setVisibility(TextView.VISIBLE);
            }
            if (selectedItem == position) {
                ImageView icon = (ImageView) row.findViewById(R.id.icon);
                icon.setImageResource(R.drawable.play);
                icon.setVisibility(ImageView.VISIBLE);

            }

        return row;
    }
}

1 Answer 1

1

You shoud have your custom adapter class like this:

public class ListArrayAdapter extends ArrayAdapter<String>{

    Context context;
    ArrayList<String> array=new ArrayList<String>();
    LayoutInflater mInflater;
    int selected;

    public ListArrayAdapter(Context context,int textViewResourceId,ArrayList<String> list)
    {
        super(context, textViewResourceId, list);

        this.context=context;
        array=list; 
        mInflater = LayoutInflater.from(context);
            selected=list.size()+1;     
    }   
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {       
        final ViewHolder holder;

        if(convertView==null)
        {
                 convertView = mInflater.inflate(R.layout.listitem_row, null);
                 holder = new ViewHolder();

                 holder.label = (TextView) convertView.findViewById(R.id.station);
                 holder.imageView = (ImageView) convertView.findViewById(R.id.imageViewDisplay);                     
                 holder.icon = (ImageView) convertView.findViewById(R.id.icon);
                 holder.area = (TextView) row.findViewById(R.id.area);

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

       // your code goes here 

       convertView.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {

                  selected=position;
                                  holder.icon.setImageResource(R.drawable.play);
                                  holder.icon.setVisibility(View.VISIBLE);
                }
       });
       if(selected==position)
       {
             holder.icon.setImageResource(R.drawable.play);
             holder.icon.setVisibility(View.VISIBLE);
       }
       else 
             holder.icon.setVisibility(View.GONE);

        return convertView;
    }

    static class ViewHolder
    {
       TextView label;
       ImageView imageView;
       ImageView icon;
       TextView area;
    }
}

and you don't need to worry for your this proble in your listview.onItemClick().

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.