Dimitri
Dimitri

Reputation: 1924

Listview item not visible after third item click android

When i clicked on a row in my listview the holder.four become visible, then when i clicked a second time it becomes invisible. When i clicked for a third time to make it visible it doesnt work. I believe it has a problem with runnable thread in vi onclick listener. can somebody tell me how can i remedy this issue.

***vi = inflater.inflate(R.layout.row_operation, null);
    holder = new ViewHolder();
    holder.one = (TextView) vi.findViewById(R.id.text_on);
    holder.two = (TextView) vi.findViewById(R.id.text_messag);
    holder.three = (TextView) vi.findViewById(R.id.text_th);
    holder.four = (TextView) vi.findViewById(R.id.text_details);
    vi.setTag(holder);
    holder.one.setText(data.get(position).getmontant()+" EUR");
    holder.two.setText((data.get(position).getlibelle()));
    holder.three.setText(data.get(position).getdateValeur());
    holder.four.setVisibility(View.GONE);
    holder.four.setText(data.get(position).getdateOper());
    //clickEvent();
    vi.setOnClickListener(this);
    return vi;
}
/*
 * On Click event
 */
@Override
public void onClick(final View v){
    v.post(new Runnable() {
        @Override
        public void run() {
            ViewHolder holder = ((ViewHolder)v.getTag());
            holder.four.setVisibility(View.VISIBLE);
            if(selectedHolder != null)
                holder.four.setVisibility(View.GONE);
            selectedHolder = holder;
        }
    });
}

}*

Upvotes: 0

Views: 479

Answers (2)

ataurrehman
ataurrehman

Reputation: 129

check this piece of code

@Override
public void onClick(final View v){
    v.post(new Runnable() {
        @Override
        public void run() {
            ViewHolder holder = ((ViewHolder)v.getTag());

            if(selectedHolder != null)
        {
            if (holder.four.getVisibility()==View.GONE)
               holder.four.setVisibility(View.VISIBLE);
            else if (holder.four.getVisibility()==View.INVISIBLE)
               holder.four.setVisibility(View.VISIBLE);
            else if (holder.four.getVisibility()==View.VISIBLE)           
                       holder.four.setVisibility(View.GONE);
        }
            selectedHolder = holder;
        }
    });
}

Upvotes: 1

Kshitij
Kshitij

Reputation: 8614

I guess 'if condition is where ur logic breaks -

U need to reset the selectedHolder back to null for ur logic to work -

Instead of this -

if(selectedHolder != null)
                holder.four.setVisibility(View.GONE);
            selectedHolder = holder;

Do this -

if(selectedHolder != null) {
 holder.four.setVisibility(View.GONE);
 selectedHolder = null;
} else {
 selectedHolder = holder;
}

Upvotes: 1

Related Questions