Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.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
Android 适配器返回同一项两次_Android_Android Listview_Android Adapter - Fatal编程技术网

Android 适配器返回同一项两次

Android 适配器返回同一项两次,android,android-listview,android-adapter,Android,Android Listview,Android Adapter,我有一个包含一些项目的列表视图。它显示数据库中搜索的结果,其中两个项目符合select语句的条件 当我第一次搜索时,它会返回两次相同的项目。但是,当我再次单击“搜索”按钮时,这一次是ok,显示两个项目。我该怎么做才能在第一次得到正确的物品 适配器: public class ListaExpedientesAdapter extends BaseAdapter { private ArrayList<BeanListaExpedientes> listaExpedientes; p

我有一个包含一些项目的列表视图。它显示数据库中搜索的结果,其中两个项目符合select语句的条件

当我第一次搜索时,它会返回两次相同的项目。但是,当我再次单击“搜索”按钮时,这一次是ok,显示两个项目。我该怎么做才能在第一次得到正确的物品

适配器:

public class ListaExpedientesAdapter extends BaseAdapter {

private ArrayList<BeanListaExpedientes> listaExpedientes;
private LayoutInflater inflater=null;
private Context c;

public ListaExpedientesAdapter(Context c, ArrayList<BeanListaExpedientes> lista){
    this.listaExpedientes=lista;
    inflater=LayoutInflater.from(c);
    this.c=c;
}

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

@Override
public Object getItem(int position) {

    return listaExpedientes.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    ViewHolder holder;
    if(convertView==null){
        convertView=inflater.inflate(R.layout.search_exp_adapter_layout, null);
        holder=new ViewHolder();
        holder.numexp=(TextView)convertView.findViewById(R.id.textnumexp);
        holder.nombrecomercial=(TextView)convertView.findViewById(R.id.textnombrecomercial);
        holder.nombrecompleto=(TextView)convertView.findViewById(R.id.textnombrecompleto);
        holder.foto=(ImageView)convertView.findViewById(R.id.searchfoto);
        holder.codficha=(TextView)convertView.findViewById(R.id.textviewcodficha);
        holder.numexp.setText(String.valueOf(listaExpedientes.get(position).getNumexp()));
        holder.nombrecompleto.setText(String.valueOf(listaExpedientes.get(position).getNombrecompleto()));
        holder.nombrecomercial.setText(String.valueOf(listaExpedientes.get(position).getNombrecomercial()));
        holder.foto.setImageBitmap(Bitmap.createScaledBitmap(BitmapFactory.decodeFile(listaExpedientes.get(position).getFoto()),dpToPx(80), dpToPx(80), true));
        holder.codficha.setText(String.valueOf(listaExpedientes.get(position).getCodficha()));
    }else{
        holder = (ViewHolder) convertView.getTag();
    }

    if(holder==null){
        holder=new ViewHolder();
    }



    return convertView;
}

private int dpToPx(int dp)
{
    float density = c.getResources().getDisplayMetrics().density;
    return Math.round((float)dp * density);
}
static class ViewHolder{
    TextView numexp;
    TextView nombrecompleto;
    TextView nombrecomercial;
    ImageView foto;
    TextView codficha;

}
}
公共类ListaExpedienteAdapter扩展BaseAdapter{
私有ArrayList ListaExpedients;
专用充气机=空;
私有上下文c;
公共列表ExpedienteSadapter(上下文c,数组列表A){
this.listaexpedients=lista;
充气机=来自(c)的充气机;
这个.c=c;
}
@凌驾
public int getCount(){
返回listaexpedients.size();
}
@凌驾
公共对象getItem(int位置){
返回listaexpedients.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=充气机。充气(R.layout.search\u exp\u adapter\u layout,null);
holder=新的ViewHolder();
holder.numexp=(TextView)convertView.findViewById(R.id.textnumexp);
holder.nombrecomeral=(TextView)convertView.findViewById(R.id.textNombrecomeral);
holder.nombrecompleto=(TextView)convertView.findViewById(R.id.textnombrecompleto);
holder.foto=(ImageView)convertView.findViewById(R.id.searchfoto);
holder.codficha=(TextView)convertView.findViewById(R.id.textviewcodficha);
holder.numexp.setText(String.valueOf(listaexpedients.get(position.getNumexp());
holder.nombrecompleto.setText(String.valueOf(listaexpedients.get(position.getNombrecompleto());
holder.nombrecomeral.setText(String.valueOf(listaexpedients.get(position.getnombrecomeral());
holder.foto.setImageBitmap(Bitmap.createScaledBitmap(BitmapFactory.decodeFile(listaExpedientes.get(position.getFoto()),dpToPx(80),dpToPx(80),true));
holder.codficha.setText(String.valueOf(listaexpedients.get(position.getCodficha());
}否则{
holder=(ViewHolder)convertView.getTag();
}
if(holder==null){
holder=新的ViewHolder();
}
返回视图;
}
专用int dpToPx(int dp)
{
浮动密度=c.getResources().getDisplayMetrics().density;
返回数学圆((浮点)dp*密度);
}
静态类视窗夹{
文本视图numexp;
文本视图nombrecompleto;
TextView-nombrecomerical;
图像视图foto;
TextView codficha;
}
}
启动SQL语句的代码段(在线程内部):

Cursor csr=db.rawQuery(判决,空);
listaexpedients=newarraylist();
if(csr.moveToFirst()){
做{
codficha=csr.getLong(3);
codexpedinte=csr.getLong(15);
nombrecompleto=csr.getString(8);
nombrecomerical=csr.getString(13);
光标csr2=db.rawQuery(“从fotos中选择路径,其中codficha=“+codficha+”LIMIT 1”,null);
if(csr2.moveToFirst()){
path=csr2.getString(0);
}
添加(新的BeanListFacilites(路径、Nombrecomeral、nombrecompleto、CodeExpedinte、codficha));
}while(csr.moveToNext());
刷新适配器();
adapter.notifyDataSetChanged();
那些行

 holder.numexp.setText(String.valueOf(listaExpedientes.get(position).getNumexp()));
 holder.nombrecompleto.setText(String.valueOf(listaExpedientes.get(position).getNombrecompleto()));
 holder.nombrecomercial.setText(String.valueOf(listaExpedientes.get(position).getNombrecomercial()));
 holder.foto.setImageBitmap(Bitmap.createScaledBitmap(BitmapFactory.decodeFile(listaExpedientes.get(position).getFoto()),dpToPx(80), dpToPx(80), true));
 holder.codficha.setText(String.valueOf(listaExpedientes.get(position).getCodficha()));
跳出if/else逻辑。您的
getView
至少被调用
getCount
次,但只有一次调用
convertView=null

编辑


初始化
holder
后,当
convertView
为空时,不要忘记调用
convertView.setTag(holder)
请删除此行的第一行

if(holder==null){
        holder=new ViewHolder();
    }
并在getview中使用以下行

LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listaexpedientesdapter
构造函数中删除此行

inflater=LayoutInflater.from(c);

除了修复holder第二次为null的错误外,由于UI组件为null(已解决),您的解决方案工作得非常好。谢谢!如果可以,将进行upvote。convertView为null时holder应始终为null。您必须调用convertView.setTag(holder)
inflater=LayoutInflater.from(c);