edi233
edi233

Reputation: 3031

Wrong action when click on item in ListView

I have a problem with click on item. I want to click on item and show layout which is invisible in this item. When I click on first item, layout show, but in other item. This is my adapter:

    public ActualOffersUsersListAdapter(Context context, ArrayList<Offers> offers, ArrayList<User> users) {
        this.context = context;
        offersList = offers;
        this.users = users;
        inflater = (LayoutInflater) getApplicationContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return offersList.size();
    }

    @Override
    public Object getItem(int position) {
        return offersList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

        if (convertView == null) {
            convertView = inflater.inflate(
                    R.layout.contact_with_users_list_item, null);
            holder = new ViewHolderUsers();
            holder.cities = (TextViewWithImage) convertView.findViewById(R.id.contactWithUsersCityFrom);
            holder.name = (TextView) convertView.findViewById(R.id.contactWithUsersName);
            holder.date = (TextView) convertView.findViewById(R.id.contactWithUsersCalendarTXT);
            holder.picture = (NetworkImageView) convertView.findViewById(R.id.contactWithUsersPicture);
            holder.contactWithUsersTransportIcon = (ImageView) convertView.findViewById(R.id.contactWithUsersTransportIcon);
            holder.contactWithUsersShipmentIcon = (ImageView) convertView.findViewById(R.id.contactWithUsersShipmentIcon);
            holder.expandImageView = (ImageView) convertView.findViewById(R.id.expandImageView);
            holder.myOffersExpand = (LinearLayout) convertView.findViewById(R.id.myOffersExpand);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolderUsers)convertView.getTag();
        }

        holder.cities.setText(offersList.get(position).getStart() + " [img src=ic_in_text_arrow/] " + offersList.get(position).getDestination());
        holder.date.setText(offersList.get(position).getCreatedAt());

        if(messageUser!=null) {
            for(int i = 0; i < usersMessages.size(); i++){
                if(offersList.get(position).getUserId() == usersMessages.get(i).getId()){
                    if(usersMessages.get(i).getUserType().equals("company"))
                        holder.name.setText(usersMessages.get(i).getProfile().getCompanyName());
                    else{
                        if(usersMessages.get(i).getProfile().getFirst_name() == null && usersMessages.get(i).getProfile().getLast_name() == null)
                            holder.name.setText("-");
                        else
                            holder.name.setText(usersMessages.get(i).getProfile().getFirst_name() + " " + usersMessages.get(i).getProfile().getLast_name());
                    }
                    if(!usersMessages.get(i).getAvatarURL().contains("http")) {
                        holder.picture.setImageUrl("http://" + usersMessages.get(i).getAvatarURL(), mImageLoader);
                    }else{
                        holder.picture.setImageUrl(usersMessages.get(i).getAvatarURL(), mImageLoader);
                    }
                    notifyDataSetChanged();
                    lastSeenOffersList.refreshDrawableState();
                }
            }
        }

        if(offersList.get(position).getShipmentType() != null) {
            holder.contactWithUsersShipmentIcon.setImageDrawable(ShipmentTypeEnum.
                    setIconForShipmentType(ShipmentTypeEnum.fromString(offersList.get(position).getShipmentType()), getApplicationContext()));
        }else{
            holder.contactWithUsersShipmentIcon.setVisibility(View.GONE);
        }
        if(offersList.get(position).getTransportType() != null) {
            holder.contactWithUsersTransportIcon.setImageDrawable(TransportTypeEnum
                    .setIconForTransportType(TransportTypeEnum.fromString(offersList.get(position).getTransportType()), getApplicationContext()));
        }else{
            holder.contactWithUsersTransportIcon.setVisibility(View.GONE);
        }


        convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.myOffersExpand.setVisibility(View.VISIBLE);
            }
        });

        holder.contactWithUsersTransportIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });
        holder.contactWithUsersShipmentIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        });

        return convertView;
    }
}


public static class ViewHolderUsers {
    public TextViewWithImage cities;
    public NetworkImageView picture;
    public TextView date;
    public TextView name;
    public ImageView contactWithUsersTransportIcon;
    public ImageView contactWithUsersShipmentIcon;
    public ImageView expandImageView;
    public LinearLayout myOffersExpand;
    public boolean isExpand = false;
}

It is something wrong with

convertView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.myOffersExpand.setVisibility(View.VISIBLE);
            }
        });

Any idea why?

Upvotes: 0

Views: 43

Answers (1)

karvoynistas
karvoynistas

Reputation: 1285

Try to attach an onItemClickListener to the ListView. So, your code will look like this :

Listview listview = new ListView(this);
ActualOffersUsersListAdapter adapter = new ActualOffersUsersListAdapter(/*arguments here*/);
listview.setAdapter(adapter);


listview.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view,int position, long 
       Toast.makeText(this,"You selected : " + position,Toast.LENGTH_SHORT).show();  
      // your code     
   }
});

Upvotes: 1

Related Questions