簡體   English   中英

ExpandableListView,每個組具有不同的圖像

[英]ExpandableListView with different images for each groupHeader

我在使用expandableListAdapter時為每個groupHeader設置不同的圖標時遇到了一些困難,這是代碼。

我主要是在onCreate()上調用它

expListView = (ExpandableListView) findViewById(R.id.lvExp);

// preparing list data
prepareListData();

listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

// setting list adapter
expListView.setAdapter(listAdapter);

我的適配器代碼:

package info.androidhive.slidingmenu;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Context _context;
    private List<String> _listDataHeader; // header titles
    // child data in format of header title, child title
    private HashMap<String, List<String>> _listDataChild;

    private ArrayList<Integer> groupImages;

    public ExpandableListAdapter(Context context, List<String> listDataHeader,
            HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);

        txtListChild.setText(childText);
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this._listDataHeader.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
         String headerTitle = (String) getGroup(groupPosition);
            if (convertView == null) {
                LayoutInflater infalInflater = (LayoutInflater) this._context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = infalInflater.inflate(R.layout.list_group, null);
            }

            TextView lblListHeader = (TextView) convertView
                    .findViewById(R.id.lblListHeader);
            lblListHeader.setTypeface(null, Typeface.BOLD);
            lblListHeader.setText(headerTitle);

            ImageView imageView = (ImageView)     convertView.findViewById(R.id.imgIconeProblema);
       LINE 99 -> int imageId = this.groupImages.get(groupPosition);
            imageView.setImageResource(imageId);

            return convertView;
    }


    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

最后,我的prepareList()

private void prepareListData() {
    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();


    groupImages = new ArrayList<Integer>();
    groupImages.add(R.drawable.acessibilidade);
    groupImages.add(R.drawable.aguaeesgoto);
    groupImages.add(R.drawable.arvore);
    groupImages.add(R.drawable.bempublico);
    groupImages.add(R.drawable.buraco);
    groupImages.add(R.drawable.dengue);
    groupImages.add(R.drawable.educacao);
    groupImages.add(R.drawable.iluminacao);
    groupImages.add(R.drawable.lixo);
    groupImages.add(R.drawable.obras2);
    groupImages.add(R.drawable.pedestreeciclista);
    groupImages.add(R.drawable.pichacao);
    groupImages.add(R.drawable.queimada);
    groupImages.add(R.drawable.saude);
    groupImages.add(R.drawable.social);
    groupImages.add(R.drawable.transito);
    groupImages.add(R.drawable.transporte);


    // Adding child data

    listDataHeader.add("Acessibilidade");
    listDataHeader.add("Água e esgoto");
    listDataHeader.add("Árvore");
    listDataHeader.add("Bem público");
    listDataHeader.add("Buraco");
    listDataHeader.add("Dengue");
    listDataHeader.add("Educação");
    listDataHeader.add("Lixo");
    listDataHeader.add("Iluminação e energia");
    listDataHeader.add("Obra");
    listDataHeader.add("Pedestre e Ciclista");
    listDataHeader.add("Pichação");
    listDataHeader.add("Poluição");
    listDataHeader.add("Queimada");
    listDataHeader.add("Saúde");
    listDataHeader.add("Social");
    listDataHeader.add("Transporte");
    listDataHeader.add("Trânsito");


    // Adding child data
    List<String> acessibilidade = new ArrayList<String>();
    acessibilidade.add("Falta de sinalização para deficientes físicos, visuais e auditivos");
    acessibilidade.add("Dispositivo de acessibilidade em mau estado");
    acessibilidade.add("Falta de acessibilidade");
    acessibilidade.add("Pulp Fiction");

    List<String> aguaeesgoto = new ArrayList<String>();
    aguaeesgoto.add("Falta de saneamento básico");
    aguaeesgoto.add("Esgoto a céu aberto");
    aguaeesgoto.add("Falta de água");
    aguaeesgoto.add("Tratamento de esgoto inadequado");
    aguaeesgoto.add("Vazamento de água");
    aguaeesgoto.add("Bueiro entupido");
    aguaeesgoto.add("Bueiro sem tampa");
    aguaeesgoto.add("Água encanada com má qualidade");
    aguaeesgoto.add("Alagamento");

    List<String> arvore = new ArrayList<String>();
    arvore.add("Árvore caída");
    arvore.add("Poda de árvore necessária");
    arvore.add("Poda de árvore irregular");
    arvore.add("Arborização necessária");

    // Adding child data
    List<String> bempublico = new ArrayList<String>();
    bempublico.add("Bem público em mau estado de conservação");
    bempublico.add("Vandalismo em bem público");
    bempublico.add("Atendimento ruim em serviço público");
    bempublico.add("Má administração de bem público");
    bempublico.add("Falta de sinalização em bem público");

    List<String> buraco = new ArrayList<String>();
    buraco.add("Buraco no asfalto");
    buraco.add("Buraco no chão");
    buraco.add("Rua esburacada");

    List<String> dengue = new ArrayList<String>();
    dengue.add("Foco de dengue");
    dengue.add("Terreno baldio");

    List<String> educacao = new ArrayList<String>();
    educacao.add("Ensino precário");
    educacao.add("Escola em mau estado");
    educacao.add("Falta de funcionários na escola");
    educacao.add("Falta de material escolar");
    educacao.add("Falta de professores em escola");
    educacao.add("Falta de vagas em escola");

    List<String> lixo = new ArrayList<String>();
    lixo.add("Lixo ou entulho");
    lixo.add("Veículo abandonado");

    List<String> iluminacaoeenergia = new ArrayList<String>();
    iluminacaoeenergia.add("Falta de iluminação");
    iluminacaoeenergia.add("Poste de luz em mau estado");
    iluminacaoeenergia.add("Poste de luz queimado");
    iluminacaoeenergia.add("Fiação irregular");
    iluminacaoeenergia.add("Iluminação pública irregular");
    iluminacaoeenergia.add("Lâmpada acesa durante o dia");
    iluminacaoeenergia.add("Lâmpaga apagada à noite");

    List<String> obra = new ArrayList<String>();
    obra.add("Obra pública irregular");
    obra.add("Obra públuca necessária");
    obra.add("Obra pública parada");
    obra.add("Obra pública atrasada");
    obra.add("Obra pública mau executada");
    obra.add("Obra particular abandonada");
    obra.add("Obra particular irregular");

    List<String> pedestreeciclista = new ArrayList<String>();
    pedestreeciclista.add("Calçada obstruída por poste mobiliário urbano");
    pedestreeciclista.add("Tempo de travessia insuficiente do semáforo de pedestres");
    pedestreeciclista.add("Falta de sinalização para pedestres");
    pedestreeciclista.add("Calçada para pedestre em mau estado");
    pedestreeciclista.add("Falta de faixa de pedestre");
    pedestreeciclista.add("Semáfoto de pedestre quebrado");
    pedestreeciclista.add("Calçada obstruída por estabelecimento");
    pedestreeciclista.add("Calçada obstruída por veículo");
    pedestreeciclista.add("Necessidade de bicicletário ou paraciclo");
    pedestreeciclista.add("Ciclovia mal sinalizada");
    pedestreeciclista.add("Necessidade de ciclovia");
    pedestreeciclista.add("Ciclovia em mau estado");
    pedestreeciclista.add("Ciclovia irregular");

    List<String> pichacao = new ArrayList<String>();
    pichacao.add("Pichação");

    List<String> poluicao = new ArrayList<String>();
    poluicao.add("Poluição do ar");
    poluicao.add("Poluição sonora");
    poluicao.add("Poluição visual");

    List<String> queimada = new ArrayList<String>();
    queimada.add("Queimada");

    List<String> saude = new ArrayList<String>();
    saude.add("Atendimento de saúde precário");
    saude.add("Falta de profissionais de saúde");
    saude.add("Falta de leitos");
    saude.add("Instalações de saúde precárias");
    saude.add("Controle de zoonoses necessário");
    saude.add("Epidemia");
    saude.add("Infestação");

    List<String> social = new ArrayList<String>();
    social.add("Moradores de rua");
    social.add("Pedintes");
    social.add("Ponto de venda ou consumo de drogas");
    social.add("Invasão ou assentamento em propiedade particular");
    social.add("Ocupação de local público");

    List<String> transporte = new ArrayList<String>();
    transporte.add("Ponto de parada sem abrigo");
    transporte.add("Veículo de transporte público em mau estado");
    transporte.add("Longo tempo de espera por transporte público");
    transporte.add("Superlotação no transporte público");
    transporte.add("Má conduta do motorista ou funcionário do transporte público");
    transporte.add("Falta de segurança no transporte público");
    transporte.add("Interrupção no serviço ou trajeto do transporte público");
    transporte.add("Transporte público sem ventilação adequeada");
    transporte.add("Estação em mau estado");
    transporte.add("Ponto de parada em mau estado");
    transporte.add("Falta de transporte público");
    transporte.add("Falta ou deficiência de sinalização no transporte público");

    List<String> transito = new ArrayList<String>();
    transito.add("Falta de sinalização de trânsito");
    transito.add("Placa de sinalização de trânsito em mau estado");
    transito.add("Congestionamento");
    transito.add("Semáforo de trânsito quebrado");
    transito.add("Semáforo de trânsito necessário");
    transito.add("Via de trânsito em mau estado");
    transito.add("Veículo estacionado em local proibido");
    transito.add("Trânsito de veículos proibidos");
    transito.add("Falta de fiscalização de trânsito");

    listDataChild.put(listDataHeader.get(0), acessibilidade); // Header, Child data
    listDataChild.put(listDataHeader.get(1), aguaeesgoto);
    listDataChild.put(listDataHeader.get(2), arvore);
    listDataChild.put(listDataHeader.get(3), bempublico);
    listDataChild.put(listDataHeader.get(4), buraco);
    listDataChild.put(listDataHeader.get(5), dengue);
    listDataChild.put(listDataHeader.get(6), educacao);
    listDataChild.put(listDataHeader.get(7), lixo);
    listDataChild.put(listDataHeader.get(8), iluminacaoeenergia);
    listDataChild.put(listDataHeader.get(9), obra);
    listDataChild.put(listDataHeader.get(10), pedestreeciclista);
    listDataChild.put(listDataHeader.get(11), pichacao);
    listDataChild.put(listDataHeader.get(12), poluicao);
    listDataChild.put(listDataHeader.get(13), queimada);
    listDataChild.put(listDataHeader.get(14), saude);
    listDataChild.put(listDataHeader.get(15), social);
    listDataChild.put(listDataHeader.get(16), transporte);
    listDataChild.put(listDataHeader.get(17), transito);


}

不知道為什么,我開始錯誤

“ java.lang.NullPointerException:嘗試在info.androidhive.slidingmenu.ExpandableListAdapter.getGroupView的空引用上調用虛擬方法'java.lang.Object java.util.ArrayList.get(int)'(ExpandableListAdapter.java:99)

第99行標在上方。

謝謝

我認為,您沒有在ExpandableListAdapter初始化groupImages ,因此它為null。 groupImagesMainActivity傳遞到ExpandableListAdapter (例如listChildData和ListDataHeader)。

public ExpandableListAdapter(Context context, List<String> listDataHeader,
        HashMap<String, List<String>> listChildData, ArrayList<Integer> groupImages) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
    this.groupImages = groupImages;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM