ExpandableListView scrollt nur bis letztes Oberelement, aber nicht bis letztem Child

  • Antworten:1
Philip M.
  • Forum-Beiträge: 90

06.10.2011, 14:22:01 via Website

Guten Tag an alle,

der Titel ist leider etwas unglücklich gewählt, aber mir viel grade nichts besseres ein. Die Sache ist nun die....
Ich habe einen ExpandableListView welcher ganz gewhnlich mit Daten befüllt wird über einen "SimpleExpandableListAdapter", welchen ich ein wenig erweitert habe, damit der in den Child-Elementen vorhandene WebView gefüllt wird.

Das ganze funktioniert auch echt Prima und macht keine Probleme. Die Probleme kommen erst, wenn der ExpandableListView mit seinen Ober-Elementen (Childs nicht mitgezählt) größer ist als der Bildschirm und dadurch einen Scrollbalken erhält. Nun kann ich zwar jeden Menü-Punkt den ich will expandieren lassen und dann auch durch scrollen, allerdings funktioniert dies nur mit dem letzten Element nicht. Wenn ich das letzte Element expandieren will, scheint es dies wohl auch zu machen, allerdings kann ich nicht weiter runterscrollen um nach zu schauen.

Weiß jemand wodran dies liegen könnte? Ich versuch mal ein bisschen Quellcode zu posten welcher vielleicht aufschluss geben könnte.

Liegt es vielleicht an dem verwendeten WebView? Danke für eure Mühe (:

[code]
private List<HashMap<String, String>> createGroupList(Object array[], String key) {
ArrayList<HashMap<String, String>> result = new ArrayList<HashMap<String, String>>();
for( int i = 0 ; i < array.length ; ++i ) {
HashMap<String, String> m = new HashMap<String, String>();
m.put( key, array[i].toString() );
result.add(m);
}
return (List<HashMap<String, String>>)result;
}


private List<ArrayList<HashMap<String, Object>>> createChildList(Object array[], String key) {
ArrayList<ArrayList<HashMap<String, Object>>> result = new ArrayList<ArrayList<HashMap<String, Object>>>();
for( int i = 0 ; i < array.length ; ++i ) {

ArrayList<HashMap<String, Object>> secList = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> child = new HashMap<String, Object>();
child.put( key, array[i] );
secList.add(child);
result.add(secList);
}
return result;
}


private ExpandableListView getExpandableListView() {
if(listView == null) {
listView = (ExpandableListView)findViewById(R.id.hilfeListView);

SimpleExpandableListAdapter adapter = new ExpandableListViewAdapter(
this,
createGroupList(getResources().getStringArray(R.array.hilfeArray), "helpMenuPoint"),
R.layout.expandable_list_adapter_group,
new String[] { "helpMenuPoint"},
new int[] { R.id.GroupName },
createChildList(getResources().getStringArray(R.array.hilfeTextArray), "helpText"),
R.layout.expandable_list_adapter_child,
new String[] { "helpText"},
new int[] { R.id.expandableWebView }
);
listView.setAdapter(adapter);
}
return listView;
}
[/code]

1/**
2 *
3 */
4package de.projekt.ui.adapter;
5
6import java.util.List;
7import java.util.Map;
8
9import android.content.Context;
10import android.util.Log;
11import android.view.View;
12import android.view.ViewGroup;
13import android.webkit.WebView;
14import android.widget.SimpleExpandableListAdapter;
15
16public class ExpandableListViewAdapter extends SimpleExpandableListAdapter {
17
18 private Context context;
19 private String[] childFrom;
20
21
22 public ExpandableListViewAdapter(Context context,
23 List<? extends Map<String, ?>> groupData, int groupLayout,
24 String[] groupFrom, int[] groupTo,
25 List<? extends List<? extends Map<String, ?>>> childData,
26 int childLayout, String[] childFrom, int[] childTo) {
27 super(context, groupData, groupLayout, groupFrom, groupTo, childData,
28 childLayout, childFrom, childTo);
29
30 this.context = context;
31 this.childFrom = childFrom;
32 }
33
34 @SuppressWarnings("unchecked")
35 @Override
36 public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
37
38 Log.d("Adapter", (String)((Map<String, ?>)getChild(groupPosition, childPosition)).get(childFrom[0]));
39 WebView wv = (WebView)convertView;
40 wv = new WebView(context);
41 wv.loadUrl((String)((Map<String, ?>)getChild(groupPosition, childPosition)).get(childFrom[0]));
42
43 return wv;
44 }
45}

Antworten
Philip M.
  • Forum-Beiträge: 90

06.10.2011, 15:24:14 via Website

Okay, das Problem ist mehr oder minder gelöst, auch wenn ich damit nich zufrieden bin.
Ich habe nun einfach ein LinearLayout erstellt und dort einmal den WebView raufgelegt und nochmals ein TextView welcher allerdings keinen Text enthält. Die Funktion dafür sieht nun so aus:

1@SuppressWarnings("unchecked")
2 @Override
3 public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
4 Log.d("Adapter", (String)((Map<String, ?>)getChild(groupPosition, childPosition)).get(childFrom[0]));
5 LinearLayout ll = new LinearLayout(context);
6 ll.setOrientation(LinearLayout.HORIZONTAL);
7 WebView wv = new WebView(context);
8 wv.loadUrl((String)((Map<String, ?>)getChild(groupPosition, childPosition)).get(childFrom[0]));
9 ll.addView(wv);
10 TextView tv = new TextView(context);
11 ll.addView(tv);
12 return ll;
13 }

Aber ganz ehrlich, das kann doch nicht im Sinne des Erfinders sein, oder? Vielleicht kann mir einer von euch das seltsame Verhalten des ExpandableListViews erklären? Oder habe ich einfach etwas falsch geamcht? Wenn ja, dann erklärt mir bitte meinen Fehler, ich bin für jede Art von Bildung dankbar (-:

Antworten