2010-12-01 6 views
2

Récemment, je suis en train d'utiliser de liste extensible android, je googlé autour et sommes tombés sur ceAndroid ExpandableListView

http://about-android.blogspot.com/2010/04/steps-to-implement-expandablelistview.html

J'ai suivi les étapes presque exactement, mais je créé un fichier juste pour contenir la mise en œuvre de mon propre adaptateur. Au fond de ma méthode onCreate de l'activité principale que j'appelle:

mEntries = findViewById(R.id.entries);  
ExpandableListAdapter adapter = new MyExpandableListAdapter(this); 
mEntries.setAdapter(adapter); 

Voici le code (pris au-dessus URL et modifié):

import android.content.Context; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AbsListView; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.TextView; 

public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
    private String[] groups = {"Vehicle", "Baj"}; 
    private String[][] children = { 
     {"Mol", "Mor"}, 
     {"In", "Ruh"} 
    }; 

    private Context cxt; 

    public MyExpandableListAdapter(Context cxt) { 
     this.cxt = cxt; 
    } 

    @Override 
    public Object getChild(int groupPos, int childPos) { 
     return children[groupPos][childPos]; 
    } 

    @Override 
    public long getChildId(int groupPos, int childPos) { 
     return childPos; 
    } 

    @Override 
    public View getChildView(int groupPos, int childPos, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     TextView tv = getGenericView(); 
     tv.setText(getChild(groupPos, childPos).toString()); 
     return tv; 
    } 

    @Override 
    public int getChildrenCount(int groupPos) { 
     return children[groupPos].length; 
    } 

    @Override 
    public Object getGroup(int groupPos) { 
     return groups[groupPos]; 
    } 

    @Override 
    public int getGroupCount() { 
     return groups.length; 
    } 

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

    public TextView getGenericView() { 
     // Layout parameters for the ExpandableListView 
     AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
      ViewGroup.LayoutParams.FILL_PARENT, 64); 

     TextView tv = new TextView(this.cxt); 
tv.setLayoutParams(lp); 

     // Center the text vertically 
     tv.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); 
     // Set the text starting position 
     tv.setPadding(36, 0, 0, 0); 
     return tv; 
    } 

    @Override 
    public View getGroupView(int groupPos, boolean isExpanded, View convertView, 
      ViewGroup parent) { 
     TextView tv = getGenericView(); 
     tv.setText(getGroup(groupPos).toString()); 
     return null; 
    } 

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

    @Override 
    public boolean isChildSelectable(int groupPos, int childPos) { 
     return true; 
    } 

} 

La logcat cracher ces:

12-01 22:24:54.883: ERROR/AndroidRuntime(14424): java.lang.NullPointerException 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.AbsListView.obtainView(AbsListView.java:1276) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.ListView.makeAndAddView(ListView.java:1668) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.ListView.fillDown(ListView.java:637) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.ListView.fillFromTop(ListView.java:694) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.ListView.layoutChildren(ListView.java:1521) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.AbsListView.onLayout(AbsListView.java:1113) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.view.View.layout(View.java:6830) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:900) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.view.View.layout(View.java:6830) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.view.View.layout(View.java:6830) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.view.View.layout(View.java:6830) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 
12-01 22:24:54.883: ERROR/AndroidRuntime(14424):  at android.view.View.layout(View.java:6830) 
snip... 

Quelqu'un veut-il éclaircir cela? =/

EDIT: J'ai déjà implémenté les méthodes requises dans la classe Base.

EDIT2: ajouté le code

Répondre

4

finalement obtenu ... il est à:

@Override 
public View getGroupView(int groupPos, boolean isExpanded, View convertView, 
     ViewGroup parent) { 
    TextView tv = getGenericView(); 
    tv.setText(getGroup(groupPos).toString()); 
    return null; 
} 

Il est de retour nul ... je devrais sérieusement pas de code quand je suis endormi =/

+0

Donc, vous devriez retourner 'tv 'ici à la place? –

+0

oui, retour tv, tout comme dans 'getChildView()' retour null provoque nullPointerException – yuttadhammo

+0

@SiGanteng: je faisais exactement la même chose faux .. retour null .. – mudit

0

Lorsque vous étendez BaseExpandableListAdapter, vous devez toujours donner une mise en œuvre sur la façon de montrer chaque ligne. Sans cela, je pense que l'impl actuel est de rendre nul ce qui est ce que vous voyez. Donc, je voudrais également mettre en œuvre:

public int getGroupCount() 
public int getChildrenCount(int groupPosition) 
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 

J'ai également implémenté d'autres fonctions mais je ne les ai pas montrées. J'espère que cela t'aides.

+0

ouais quand je dit que je suivais les étapes presque exactement, signifie que je les ai déjà mis en œuvre. Désolé pour la confusion. –

+0

Ensuite, vous devriez poster votre code parce que sans lui, nous ne pouvons pas voir ce qui ne va pas. –

+0

C'est terriblement long, mais je le ferai quand même = = –

Questions connexes