简体   繁体   中英

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.

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);
}

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;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM