Ich arbeite an einer Android-App, die eine Navigationsleiste mit einem ExpandableListView-Menü implementiert, in dieser Ansicht müssen einige Elemente childs haben und andere müssen eine Aktion ausführen, wenn geklickt wird Kinder. Mein Problem hier ist, dass ich einige zufällige crashing habe und ich kann nicht verstehen, was es verursacht. Hier ist der Fehlercode:ExpandableListView stürzt ab, wenn einige Gruppen leer sind
E/Android Runtime: FATAL AUSNAHME: Haupt Prozess: com.toptainer.www, PID: 9722 java.lang.NullPointerException: Versuch zum Aufrufen virtuelle Methode ‚Leere android.widget.TextView .setText (java.lang.CharSequence)‘auf null Objektreferenz bei com.example.nignog.toptainer.ExpandableListAdapter.getChildView (Success.java:377)
App wird meist abstürzen, wenn eine leere Gruppe klicken und dann auf eine Gruppe mit Kindern klicken, obwohl dies die App nicht immer zum Absturz bringt.
Auf jeden Fall ist hier mein Code:
Vor allem hier ist mein Adapter:
class ExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<String> _listDataHeader;
private HashMap<String, List<String>> _listDataChild;
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) {
if(getChildrenCount(groupPosition)>1){
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.menu_item, null);
}
TextView txtListChild = (TextView) convertView
.findViewById(R.id.textoOpcion);
txtListChild.setText(childText);
}
else{
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = infalInflater.inflate(R.layout.empty_item, null);
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
if(this._listDataChild.get(this._listDataHeader.get(groupPosition))
!= null){
return this._listDataChild.get(this._listDataHeader.get(groupPosition))
.size();
}
return 1;
}
@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.menu_item, null);
}
TextView lblListHeader = (TextView) convertView
.findViewById(R.id.textoOpcion);
lblListHeader.setTypeface(null, Typeface.BOLD);
lblListHeader.setText(headerTitle);
ImageView icon = (ImageView) convertView.findViewById(R.id.Icono);
int[] iconos = {R.drawable.ic_user, R.drawable.ic_camion, R.drawable.ic_box, R.drawable.ic_file, R.drawable.ic_report, android.R.drawable.ic_delete};
icon.setImageResource(iconos[groupPosition]);
if(groupPosition == 0) {
convertView.setBackgroundColor(Color.BLACK);
lblListHeader.setTextColor(Color.WHITE);
}
else {
convertView.setBackgroundColor(Color.WHITE);
}
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
if(getChildrenCount(groupPosition)!=1)return true;
return false;
}
}
Aktivität der onCreate Methode:
android.support.v7.app.ActionBar ab = getSupportActionBar();
ab.setHomeAsUpIndicator(R.drawable.hamburger_button);
ab.setDisplayHomeAsUpEnabled(true);
expandableList= (ExpandableListView) findViewById(R.id.left_drawer);
mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mActivityTitle = getTitle().toString();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
String[] accionesMenu = {getSharedPreferences("Data",Context.MODE_PRIVATE).getString("Usuario", "NOUSER"), "Orden de viaje Emitidas", "Órdenes de viaje en Descarga","Órdenes de viaje en Tránsito","Órdenes de viaje Entregadas","Órdenes de viaje en Carga", "Órdenes de transporte","Guías pendientes", "Reporte", "Desconectar"};
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
expandableList = (ExpandableListView) findViewById(R.id.left_drawer);
prepareListData();
mMenuAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
// setting list adapter
expandableList.setAdapter(mMenuAdapter);
expandableList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
boolean booleano = expandableList.isGroupExpanded(groupPosition);
for(int i =0; i<5; i++){
if(expandableList.isGroupExpanded(i)) expandableList.collapseGroup(i);}
if(!booleano) expandableList.expandGroup(groupPosition);
if (groupPosition == 3) startGuiasActivity();
if (groupPosition == 5) {
startLoginActivity();
}
return true;
}
});
expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
if (groupPosition == 1) {
if (childPosition == 0) startOrdenesDeViajeActivity();
if (childPosition == 1) startOrdenesDeViajeDescargaActivity();
if (childPosition == 2) startOrdenesDeViajeTransitoActivity();
if (childPosition == 3) startOrdenesDeViajeEntregadasActivity();
if (childPosition == 4) startOrdenesDeViajeCargaActivity();
}
return false;
}
});
Und hier ist meine prepareData Methode:
private void prepareListData() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
// Adding data header
listDataHeader.add(getSharedPreferences("Data", Context.MODE_PRIVATE).getString("Usuario", "NOUSER"));
listDataHeader.add("Órdenes de Viaje");
listDataHeader.add("Órdenes de Transporte");
listDataHeader.add("Guías Pendientes");
listDataHeader.add("Reporte");
listDataHeader.add("Desconectar");
// Adding child data
List<String> heading1= new ArrayList<String>();
heading1.add("Emitidas");
heading1.add("En proceso de Descarga");
heading1.add("En tránsito");
heading1.add("Entregadas");
heading1.add("En proceso de Carga");
listDataChild.put(listDataHeader.get(1), heading1);
}
Jede Hilfe wird sehr geschätzt.
Siehe hier: - http://coderzpassion.com/android-expandable-listview-tutorial/ Du könntest Hilfe bekommen, danke –