带有标签的片段中包含自定义适配器的Listview不会显示正确的数据

时间:2015-01-21 23:11:08

标签: android listview android-fragments android-listview

我有一个带有3个标签的ViewPager。这些标签是相同的片段。它有一个自定义listView,包含两个textview和一个imagebutton。所以,我有一个适配器和每个项目的类。当我加载列表时,我想显示或不显示项目类中值的基础上的按钮。好吧,当Activity加载时,那些图像只是忽略该值并随机显示或不显示。

这是适配器(我试图用holder.descripcion中的值填充d.getEnlace()并且它正确显示,但按钮按照他想要的方式执行:

public class documentoAdapter extends ArrayAdapter<Documento> {
    private final  ArrayList<Documento> lista;
    LayoutInflater inflater;
    private String nombre, foto;

    public documentoAdapter(Context context,  ArrayList<Documento> lista) {
        super(context, 0, lista);
        this.lista = lista;
        inflater = LayoutInflater.from(context);
    }

    @Override
    public View getView(int position, View convertView,ViewGroup parent) {
        final ViewHolder holder;
        final Documento d = getItem(position);
        if(convertView == null){
            convertView = inflater.inflate(R.layout.documento, null);
        }
        holder = new ViewHolder();
        holder.nombre =  (TextView)convertView.findViewById(R.id.textNombre);
        holder.descripcion = (TextView)convertView.findViewById(R.id.textDescripcion);
        holder.enlace = (ImageButton)convertView.findViewById(R.id.imagenDescargar);
        holder.nombre.setText(d.getNombre());
        holder.descripcion.setText(Html.fromHtml(d.getDescripcion()));
        holder.descripcion.setMovementMethod(LinkMovementMethod.getInstance());
        if(!(d.getEnlace().equals("null"))){
            holder.enlace.setVisibility(View.VISIBLE);

        }
        return convertView;
    }
    class ViewHolder {
        TextView nombre;
        TextView descripcion;
        ImageButton enlace;
    }
    public int getCount() {
        return lista.size();
    }
    //public boolean isEnabled(int position) {
    //    return false;
    //}
    public Documento getItem(int arg0) {
        return lista.get(arg0);
    }

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

项目的类别:

public class Documento {
    private String nombre, descripcion, enlace;
    private documentoAdapter adapter;

    public Documento(String nombre, String descripcion, String enlace) {
        this.nombre = nombre;
        this.descripcion = descripcion;
        this.enlace = enlace;
    }


    public String getNombre() {
        return nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String getEnlace() {
        return enlace;
    }

    public documentoAdapter getAdapter() {
        return adapter;
    }

    public void setAdapter(documentoAdapter adapter) {
        this.adapter = adapter;
    }

}

并在片段的onCreate中我设置了适配器,如下所示:

    documentoAdapter adapter = new documentoAdapter(getActivity(), datos);
    ListView document_list = (ListView)rootView.findViewById(R.id.documentListView);
    document_list.setAdapter(adapter);

1 个答案:

答案 0 :(得分:0)

两件事:
你的ViewHolder现在是多么无用。我们的想法是,每View只实例化一个,然后在View被回收时重复使用。 2.请记住,列表行的View会被回收。因此Button已经可以设置为可见。如果您不想显示它,则需要将其设置为隐藏。