Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-滚动时ListView项目样式失败_Java_Android_Android Listview_Android Adapter - Fatal编程技术网

Java Android-滚动时ListView项目样式失败

Java Android-滚动时ListView项目样式失败,java,android,android-listview,android-adapter,Java,Android,Android Listview,Android Adapter,我的列表视图有问题。我在几个项目中使用它们,每个项目都会出现错误 在一种情况下,每个项目都有一个唯一的图像,在另一种情况下,有些项目包含粗体文本,有些项目不包含粗体文本 当我滚动图像/粗体文本时,图像/粗体文本不在正确的位置,当我在靠近L的某个点(在案例b中)再次快速上下滚动时,所有项目均为粗体 我唯一能找到的帖子是,但它并没有解决这个问题 这是我的自定义适配器: private class MyAdapter extends BaseAdapter { private List<

我的
列表视图有问题。我在几个项目中使用它们,每个项目都会出现错误

在一种情况下,每个项目都有一个唯一的图像,在另一种情况下,有些项目包含粗体文本,有些项目不包含粗体文本

当我滚动图像/粗体文本时,图像/粗体文本不在正确的位置,当我在靠近L的某个点(在案例b中)再次快速上下滚动时,所有项目均为粗体

我唯一能找到的帖子是,但它并没有解决这个问题

这是我的自定义适配器:

private class MyAdapter extends BaseAdapter {

    private List<Object> obj;
    private LayoutInflater inflater;

    public MyAdapter(Context context, List<Object> obj_list) {
        this.obj_list = obj_list;
        this.inflater = LayoutInflater.from(context);
    }

    public int getCount(){
        return this.obj_list.size();
    }

    public Object getItem(int position){
        return this.obj_list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.my_row_layout, null);
            holder = new ViewHolder();
            holder.item_one = (TextView)convertView.findViewById(R.id.txtItemOne);
            holder.item_two = (TextView)convertView.findViewById(R.id.txtItemTwo);

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

        Object objectItem = getItem(position);

        //here I set the boldness
        if(condition) {
            holder.item_one.setTypeface(null, Typeface.BOLD);
        }

        holder.item_one.setText(objectItem .getItemOne());
        holder.item_two.setText(objectItem .getItemTwo());            

        return convertView;
    }

    class ViewHolder {
        TextView hItemOne;
        TextView hItemTwo;          
    }
}
私有类MyAdapter扩展了BaseAdapter{
私人名单;
私人充气机;
公共MyAdapter(上下文上下文,列表对象列表){
this.obj_list=obj_list;
this.inflater=layoutiner.from(上下文);
}
public int getCount(){
返回此.obj_list.size();
}
公共对象getItem(int位置){
返回此.obj_list.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
if(convertView==null){
convertView=充气机。充气(R.layout.my_row_layout,null);
holder=新的ViewHolder();
holder.item_one=(TextView)convertView.findViewById(R.id.txtItemOne);
holder.item_two=(TextView)convertView.findViewById(R.id.txtItemTwo);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
objectobjectItem=getItem(位置);
//在这里我设定了大胆
如果(条件){
holder.item_one.setTypeface(null,Typeface.BOLD);
}
holder.item_one.setText(objectItem.getItemOne());
holder.item_two.setText(objectItem.getItemTwo());
返回视图;
}
类视图持有者{
TextView hItemOne;
文本视图hItemTwo;
}
}
有人知道我可能做错了什么吗?或者至少经历过同样的问题


谢谢

问题是因为您使用的是ViewHolder模式,在ViewHolder模式中,android重复使用现有视图。所以当它重用以前生成的粗体视图时。现在,如果它尝试渲染视图但未能满足您应用的条件,则只渲染上一个粗体类型的面。因此,以下方法可以解决您的问题:

holder.item_one.setTypeface(null, Typeface.NORMAL);
//here I set the boldness
if(condition) {
      holder.item_one.setTypeface(null, Typeface.BOLD);
}

问题是因为您使用的是ViewHolder模式,在ViewHolder模式中,android将重用现有视图。所以当它重用以前生成的粗体视图时。现在,如果它尝试渲染视图但未能满足您应用的条件,则只渲染上一个粗体类型的面。因此,以下方法可以解决您的问题:

holder.item_one.setTypeface(null, Typeface.NORMAL);
//here I set the boldness
if(condition) {
      holder.item_one.setTypeface(null, Typeface.BOLD);
}

如果必须在某个预定义的特定位置使用粗体,请执行以下操作:

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.my_row_layout, null);
            holder = new ViewHolder();
            holder.item_one = (TextView)convertView.findViewById(R.id.txtItemOne);
            holder.item_two = (TextView)convertView.findViewById(R.id.txtItemTwo);

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

        Object objectItem = getItem(position);


        if(position==2 || position==5) {
            holder.item_one.setTypeface(null, Typeface.BOLD);
            holder.item_one.setText(objectItem .getItemOne());
        }
        else
         holder.item_two.setText(objectItem .getItemTwo());            

        return convertView;
    }

但请记住,如果删除“else”,则它将不起作用。

如果必须在某个预定义的特定位置使用粗体,请执行以下操作:

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if(convertView == null){
            convertView = inflater.inflate(R.layout.my_row_layout, null);
            holder = new ViewHolder();
            holder.item_one = (TextView)convertView.findViewById(R.id.txtItemOne);
            holder.item_two = (TextView)convertView.findViewById(R.id.txtItemTwo);

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

        Object objectItem = getItem(position);


        if(position==2 || position==5) {
            holder.item_one.setTypeface(null, Typeface.BOLD);
            holder.item_one.setText(objectItem .getItemOne());
        }
        else
         holder.item_two.setText(objectItem .getItemTwo());            

        return convertView;
    }
但请记住,如果删除“else”,则它将不起作用

  • 对于图像,使用ImageLoader。是我使用的,并且很容易定制

  • 如果文本视图应为粗体,请将其设置为粗体。如果需要正常,请将其设置为正常。ListView回收视图,因此您需要为每个视图手动设置首选项

  • 对于图像,使用ImageLoader。是我使用的,并且很容易定制

  • 如果文本视图应为粗体,请将其设置为粗体。如果需要正常,请将其设置为正常。ListView回收视图,因此您需要为每个视图手动设置首选项


  • 将“holder.item_one.setText(objectItem.getItemOne());”移动到if条件中。为什么?我想在任何情况下设置它…好吧,ListView适配器会回收视图位置,所以当您重新分配滚动位置时。嗯…我想是这样的。。。但是,如何使某些项加粗,而使某些项不加粗?将“holder.item_one.setText(objectItem.getItemOne());”移动到if条件中。为什么?我想在任何情况下设置它…好吧,ListView适配器会回收视图位置,所以当您重新分配滚动位置时。嗯…我想是这样的。。。但是我如何才能使一些项目加粗,一些不加粗呢?谢谢,但前面的答案到目前为止效果很好!如果我遇到问题,我会支持你的想法。不管怎样谢谢:)谢谢,但是前面的答案到目前为止效果很好!如果我遇到问题,我会支持你的想法。无论如何,谢谢你:)