Android 在自定义listview适配器类中遇到问题

Android 在自定义listview适配器类中遇到问题,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,我尝试创建一个扩展SimpleAdapter的类,并覆盖getView()方法,以防止listview出现颜色更改问题(当第一项循环到底部时,颜色也会再次出现)。然而,我是这样写的: 公共类适配器扩展了SimpleAdapter{ public Adapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to

我尝试创建一个扩展SimpleAdapter的类,并覆盖getView()方法,以防止listview出现颜色更改问题(当第一项循环到底部时,颜色也会再次出现)。然而,我是这样写的:

公共类适配器扩展了SimpleAdapter{

    public Adapter(Context context, List<? extends Map<String, ?>> data,
            int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
        // TODO Auto-generated constructor stub
    }

    class ViewHolder {
        TextView txt_textview = null;
        TextView txt_distance = null;
        TextView txt_starimage = null;
        ImageView txt_imageview = null;
    }

    HashMap<Integer, View> lmap = new HashMap<Integer, View>();

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        View view = super.getView(position, convertView, parent);
        ViewHolder holder = null;


        if (lmap.get(position) == null) {
            view =LayoutInflater.from(getApplicationContext()).inflate(
                    R.layout.activity_bank_listview_item,null);
            holder = new ViewHolder();
            holder.txt_starimage = (TextView) view
                .findViewById(R.id.bank_listview_starimage);
            holder.txt_imageview = (ImageView) view
                .findViewById(R.id.bank_listview_imageview);
            holder.txt_distance = (TextView) view
                    .findViewById(R.id.bank_listview_distance);
            holder.txt_textview = (TextView) view
                    .findViewById(R.id.bank_listview_textview);

            lmap.put(position, view);
            view.setTag(holder);
        } else {
            view = lmap.get(position);
            holder = (ViewHolder) view.getTag();
        }

        return view;
    }


} 
公共适配器(上下文,列表>数据,
int资源,字符串[]从,int[]到){
超级(上下文、数据、资源、从、到);
//TODO自动生成的构造函数存根
}
类视图持有者{
TextView txt_TextView=null;
TextView txt_距离=空;
TextView txt_starimage=null;
ImageView txt_ImageView=null;
}
HashMap lmap=新的HashMap();
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
视图=super.getView(位置、转换视图、父级);
ViewHolder=null;
if(lmap.get(position)==null){
view=LayoutInflater.from(getApplicationContext())。充气(
R.layout.activity\u bank\u listview\u item,空);
holder=新的ViewHolder();
holder.txt_starimage=(文本视图)视图
.findViewById(R.id.bank\u listview\u starimage);
holder.txt_imageview=(imageview)视图
.findViewById(R.id.bank\u listview\u imageview);
holder.txt_距离=(文本视图)视图
.findViewById(R.id.bank\u listview\u距离);
holder.txt_textview=(textview)视图
.findViewById(R.id.bank\u listview\u textview);
lmap.put(位置、视图);
视图.设置标签(支架);
}否则{
视图=lmap.get(位置);
holder=(ViewHolder)view.getTag();
}
返回视图;
}
} 

但listview仅显示第一页listview项,并且以下页面为空(仅包含空布局)。我怎样才能解决这个问题?谢谢

问题在于这一行:

if (lmap.get(position) == null) {
您应该检查convertView是否为null。如果为空,则需要为新视图充气。如果不是,你应该重新使用它

e、 g


}

谢谢您的回复!但是我在LayoutInflater inflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u inflater\u SERVICE)中的“context”(context.getSystemService…)有问题;无法解析哪个显示上下文…若要使用上下文,需要将其存储在适配器构造函数中的局部变量中。例如:公共适配器(上下文上下文,列表>数据,int-resource,String[]from,int[]To){private context context;super(上下文,数据,资源,from,To);//TODO自动生成的构造函数存根}。。。一开始?再次感谢你的帮助!!我收回本地的。在适配器类中定义一个变量,以便其中定义的所有方法都可以访问该变量。将上下文存储到构造函数中定义的变量。
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
   LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   ViewHolder holder;
   if (convertView == null){
       convertView = inflater.inflate(R.layout.row, parent, false);
       holder = new ViewHolder();
       init(convertView, holder); // findViewById stuff
       convertView.setTag(holder);
   } else {
       holder = (ViewHolder) convertView.getTag();
   }

   setView(position, holder, convertView); // fill in the textviews, set background color etc.
   return convertView;