Frage zu GradientDrawale

kukuk

kukuk

App-Anbieter (kostenlos)
29
Ich habe eine ExtendendListView und in der getChildView habe ich folgenden code zum schluss. Mein Problem ist, das ich die ListView einmal aufklappen muss, dann schließe und dann wieder öffnen muss, damit in der richtigen Farbe angezeigt wird. Kann mir jemand weiterhelfen? Muss ich irgendwo noch ein refresh oder so einsetzen? Die Werte der Farben kommen alle richtig an. Das habe ich bereits überprüft.

Ich habe jetzt festgestellt, wenn ich das Try wegnehme, stürzt die App ab mit folgendem Fehler:
Die Anwendung läuft dort wohl 1x durch und beim 2x stürzt sie ab.

10-15 03:06:12.515 11064-11064/com.arbeitszeit_kalkulator_pro E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.arbeitszeit_kalkulator_pro, PID: 11064
java.lang.NullPointerException: Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.view.View.getBackground()' on a null object reference
at com.arbeitszeit_kalkulator_pro.ExtendendView$38.getChildView(ExtendendView.java:3282)
at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:451)
at android.widget.AbsListView.obtainView(AbsListView.java:2362)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1326)
at android.widget.ListView.onMeasure(ListView.java:1233)
at android.view.View.measure(View.java:19733)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:461)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.TableLayout.measureVertical(TableLayout.java:473)
at android.widget.TableLayout.onMeasure(TableLayout.java:436)
at android.view.View.measure(View.java:19733)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
at android.view.View.measure(View.java:19733)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:19733)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:446)
at android.view.View.measure(View.java:19733)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6120)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:687)
at android.view.View.measure(View.java:19733)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2271)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1358)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1607)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

Code:
try{
if (Global.erweiterte_ansicht_rahmen) {
   if (Integer.parseInt(anzahl_der_einträge.get(groupPosition)) > 1) {
      String datum = eintraege.get(childPosition).substring(0, 10);
      String datum2 = eintraege.get(childPosition + 1).substring(0, 10);


      tv.setBackgroundResource(R.drawable.border_ui);

      GradientDrawable bgShapeG = (GradientDrawable) convertView.getBackground();

      if (isnegative) {
         bgShapeG.setColor(Global.negative_stunden);


      }else{
         bgShapeG.setColor(Global.positive_stunden);

      }

      bgShapeG.setStroke(Global.rahmen_dicke,  Global.rahmen_farbe);


   }

}
}catch (Exception e){}


          return tv ;
 
Zuletzt bearbeitet:
Deine Variable convertView enthält kein Object. Daher kommt es zu eine NULLPointer Exception. Diese fängst du mit dem Try ab.

irgendwo in deinem Code fütterst du die Variable convertView, und dies schlägt fehl, so dass die Variable NICHTS (NULL) enthält.

Da fällt mir soeben ein, wenn deine Variable im Objekt tv enthalten sein sollte, dann musst du tv.convertView schreiben.
 
@override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {

Wie kann convertView denn da Null werden?

Hat das vielleicht damit noch was zu tun?

final View itemRenderer = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent);
final TextView tv = (TextView)itemRenderer.findViewById(R.id.grp_child);
 
Zuletzt bearbeitet:
kukuk schrieb:
@override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {

Fakt ist, dass deine Variable contentView NULL ist, dann musst du nachschauen wie/wo deine Funktion getChildView aufgerufen wird. Auf jeden Fall solltest du das abfangen. Gegebenenfalls mit dem Debuger beobachten.
 

Ähnliche Themen

A
Antworten
1
Aufrufe
584
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.402
jogimuc
J
M
Antworten
2
Aufrufe
631
Mozart40
M
Zurück
Oben Unten