【问题标题】:Items disappear when fast scrolling ListView快速滚动 ListView 时项目消失
【发布时间】:2014-08-23 09:39:46
【问题描述】:

我创建了一个扩展 BaseAdapter 的适配器。 以下是课程:

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

适配器可以从主类访问 ArrayList。它有大约30个项目。现在,当我加载列表时,所有项目都已加载,但是当滚动列表时,一些项目会在滚动时消失。

请提供解决方案。

【问题讨论】:

  • 去掉 if(view==null) 条件就可以了...
  • 你需要让 thm 在 if-else 中也可见

标签: android listview android-custom-view baseadapter


【解决方案1】:

你可能没有调用 setVisiblity(View.VISIBLE) 只隐藏视图,这样修复它:

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

【讨论】:

  • 如果您忘记在 else 语句中将 textColor 定义回 Black,也会发生这种情况
【解决方案2】:

试试这个方法,希望能帮助你解决问题。

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

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    相关资源
    最近更新 更多