9

estoy usando ListView ejemplo ampliable encontrado en la redjava.lang.UnsupportedOperationException: addView (Ver, LayoutParams) no se admite en AdapterView

Actividad:

public class ExpandableListViewActivity extends ExpandableListActivity { 
    /** 
    * strings for group elements 
    */ 
    static final String arrGroupelements[] = { "India", "Australia", "England", 
      "South Africa" }; 

    /** 
    * strings for child elements 
    */ 
    static final String arrChildelements[][] = { 
      { "Sachin Tendulkar", "Raina", "Dhoni", "Yuvi" }, 
      { "Ponting", "Adam Gilchrist", "Michael Clarke" }, 
      { "Andrew Strauss", "kevin Peterson", "Nasser Hussain" }, 
      { "Graeme Smith", "AB de villiers", "Jacques Kallis" } }; 

    DisplayMetrics metrics; 
    int width; 
    ExpandableListView expList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     expList = getExpandableListView(); 
     metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     width = metrics.widthPixels; 
     // this code for adjusting the group indicator into right side of the 
     // view 
     expList.setIndicatorBounds(width - GetDipsFromPixel(50), width 
       - GetDipsFromPixel(10)); 
     expList.setAdapter(new ExpAdapter(this)); 

     expList.setOnGroupExpandListener(new OnGroupExpandListener() { 
      public void onGroupExpand(int groupPosition) { 
       Log.e("onGroupExpand", "OK"); 
      } 
     }); 

     expList.setOnGroupCollapseListener(new OnGroupCollapseListener() { 
      public void onGroupCollapse(int groupPosition) { 
       Log.e("onGroupCollapse", "OK"); 
      } 
     }); 

     expList.setOnChildClickListener(new OnChildClickListener() { 
      public boolean onChildClick(ExpandableListView parent, View v, 
        int groupPosition, int childPosition, long id) { 
       Log.e("OnChildClickListener", "OK"); 
       return false; 
      } 

     }); 
    } 

    public int GetDipsFromPixel(float pixels) { 
     // Get the screen's density scale 
     final float scale = getResources().getDisplayMetrics().density; 
     // Convert the dps to pixels, based on density scale 
     return (int) (pixels * scale + 0.5f); 
    } 
} 

adaptador:

public class ExpAdapter extends BaseExpandableListAdapter { 

    private Context myContext; 

    public ExpAdapter(Context context) { 
     myContext = context; 
    } 

    public Object getChild(int groupPosition, int childPosition) { 
     return null; 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
     return 0; 
    } 

    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) myContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.child_row, null); 
     } 

     TextView tvPlayerName = (TextView) convertView 
       .findViewById(R.id.tvPlayerName); 
     tvPlayerName 
       .setText(ExpandableListViewActivity.arrChildelements[groupPosition][childPosition]); 

     return convertView; 
    } 

    public int getChildrenCount(int groupPosition) { 
     return ExpandableListViewActivity.arrChildelements[groupPosition].length; 
    } 

    public Object getGroup(int groupPosition) { 
     return null; 
    } 

    public int getGroupCount() { 
     return ExpandableListViewActivity.arrGroupelements.length; 
    } 

    public long getGroupId(int groupPosition) { 
     return 0; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater inflater = (LayoutInflater) myContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.group_row, null); 
     } 

     TextView tvGroupName = (TextView) convertView 
       .findViewById(R.id.tvGroupName); 
     tvGroupName 
       .setText(ExpandableListViewActivity.arrGroupelements[groupPosition]); 

     return convertView; 
    } 

    public boolean hasStableIds() { 
     return false; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 

main.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ExpandableListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:groupIndicator="@drawable/group_indicator" > 

     <TextView 
      android:id="@+id/android:empty" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No Items" > 
     </TextView> 
    </ExpandableListView> 

</LinearLayout> 

he intentado esta solución, pero no funcionó :(

Android: Custom ListAdapter extending BaseAdapter crashes on application launch

ahí su dicho para agregar un tercer parámetro "falsa", a la inflater.inflate (R.layout.group_row, nula, falsa);

+0

¿Este es todo el código en esa actividad? El código de la otra pregunta es 'inflater.inflate (R.layout.group_row, parent, false);' – Luksprog

+0

lo siento, no entendí tu comentario ... pero cuando estaba depurando usando log, el error es con setContentView (R .layout.main) en la actividad ... así que pegué el main.xml en la pregunta ... ¿puedes ayudarme? –

Respuesta

17

Mover el TextView fuera del elemento ExpandableListView:

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ExpandableListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:groupIndicator="@drawable/group_indicator" > 
    </ExpandableListView> 
    <TextView 
      android:id="@+id/android:empty" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="No Items" > 
    </TextView> 
</LinearLayout> 

subclases de AdapterView (como ExpandableListView) no pueden tener hijos en un diseño xml (como lo hizo en su diseño).

0

Si eres como yo y encontró a esta pregunta sin usar ExpandableListView, trate de usar la adición del tercer parámetro al método inflate, como se menciona @Luksprog, también mencionó here:

inflater.inflate(R.layout.group_row, parent, false); 

No utilice true en lugar de false o obtendrá el mismo error que lo trajo aquí, porque está tratando de adjuntar/agregarlo a la matriz, de ahí el error addView is not supported in AdapterView.

Cuestiones relacionadas