aagam94
aagam94

Reputation: 613

Items disappear when fast scrolling ListView

I have created an adapter which extends the BaseAdapter. Following is the class:

class LocalAdapter extends BaseAdapter{

    private Context context;
    public LocalAdapter(Context ctx){
        context=ctx;
    }

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

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        if(view==null){
            LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = li.inflate(R.layout.chat_list_item,viewGroup,false);
        }


        TextView rightView = (TextView)view.findViewById(R.id.rightAligned);
        TextView leftView = (TextView)view.findViewById(R.id.leftAligned);



        if(messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
            rightView.setText(messages.get(i).getMessage());
            leftView.setVisibility(View.GONE);
        }
        else{
            leftView.setText(messages.get(i).getMessage());
            rightView.setVisibility(View.GONE);
        }

        return view;
    }
}

The adapter can access the ArrayList from the main class. It has around 30 items. Now when I load the List all the items are loaded, but when scrolling through the list, some items get on disappearing on scroll.

Please provide solution for it.

Upvotes: 2

Views: 979

Answers (2)

Hareshkumar Chhelana
Hareshkumar Chhelana

Reputation: 24848

Try this way,hope this will help you to solve your problem.

class LocalAdapter extends BaseAdapter {

    private Context context;
    public LocalAdapter(Context ctx){
        context=ctx;
    }

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

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

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        if(view==null){
            viewHolder = new ViewHolder();
            view = LayoutInflater.from(context).inflate(R.layout.chat_list_item, viewGroup, false);
            viewHolder.rightView = (TextView)view.findViewById(R.id.rightAligned);
            viewHolder.leftView = (TextView)view.findViewById(R.id.leftAligned);
        }else{
            viewHolder = (ViewHolder) view.getTag();
        }


        if(messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
            viewHolder.rightView.setText(messages.get(i).getMessage());
            viewHolder.leftView.setVisibility(View.GONE);
            viewHolder.rightView.setVisibility(View.VISIBLE);
        }else{
            viewHolder.leftView.setText(messages.get(i).getMessage());
            viewHolder.rightView.setVisibility(View.GONE);
            viewHolder.leftView.setVisibility(View.VISIBLE);
        }

        return view;
    }

    class ViewHolder{
        TextView rightView;
        TextView leftView;
    }
}

Upvotes: 0

Yuraj
Yuraj

Reputation: 3195

You are probably not calling setVisiblity(View.VISIBLE) only hiding view, fix it this way:

if (messages.get(i).getFrom().equals(UserInfo.getMobileNumber())){
    rightView.setText(messages.get(i).getMessage());
    leftView.setVisibility(View.GONE);
    rightView.setVisibility(View.VISIBLE);
} else {
    leftView.setText(messages.get(i).getMessage());
    rightView.setVisibility(View.GONE);
    leftView.setVisibility(View.VISIBLE);
}

Upvotes: 3

Related Questions