我在使用expandableListAdapter为每个groupHeader设置不同的图标时遇到了一些困难,这是代码。
在main,我在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(ExpandableListAdapter.java)的空引用上调用虚方法'java.lang.Object java.util.ArrayList.get(int)' :99)
第99行标在上面。
由于
答案 0 :(得分:0)
我认为,您没有在groupImages
中初始化ExpandableListAdapter
,因此它为空。将groupImages
从MainActivity
传递到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;
}