2013-02-19 4 views
0

J'essaye de placer la taille de rangée de listview sans faire le listview personnalisé et le nouvel arrayadapter. Je règle la hauteur à LayoutParams.WRAP_CONTENT; je reçois ceci dans logcathauteur de ligne listview

02-19 20:42:25.721: E/AndroidRuntime(6936): at android.widget.AbsListView.obtainView(AbsListView.java:2465) 02-19 20:42:25.721: 
        E/AndroidRuntime(6936): at android.widget.ListView.measureHeightOfChildren(ListView.java:1250) 

Voici mon code Voir:

public View getView(int position, View convertView, ViewGroup parent) { 
       System.gc(); 
       TextView tv = new TextView(mContext.getApplicationContext()); 
       LayoutInflater inflater = getLayoutInflater(); 
       LayoutParams params = tv.getLayoutParams(); 
       String id = null; 
       mRowHeight = LayoutParams.WRAP_CONTENT; 
       if (params == null) { 
         music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME); 
         musiccursor.moveToPosition(position); 
         id = musiccursor.getString(music_column_index); 
         music_column_index = musiccursor 
.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE); 
         musiccursor.moveToPosition(position); 
         id += musiccursor.getString(music_column_index); 
         tv.setText(id); 
         params.height = mRowHeight; 
       } else 
         tv = (TextView) convertView; 
       return tv; 
+1

Y at-il une raison spécifique pour laquelle vous appelez 'System.gc()' dans getView, qui est une fonction appelée assez souvent? –

Répondre

1

E/AndroidRuntime (6936): à android.widget.AbsListView.obtainView (AbsListView.java:2465) 02-19 20: 42: 25,721: E/AndroidRuntime (6936): à android.widget.ListView.measureHeightOfChildren (ListView.java:1250)

Votre erreur signifie que la méthode getView() renverra null dans certains cas. Je suis un peu confus de votre code, vous ne gonflez nulle part convertView si est nul.

Votre approche est trop compliquée et incorrecte. Je vous suggère de créer la disposition XML pour la ligne, puis de gonfler convertView avec cette disposition, puis de définir les widgets appropriés (textViews) avec les données de Cursor.

if (convertView == null) { 
    convertView = inflater.inflate(R.layout.someRowLayout, null, false); 
    // if you have RowHolder so set him as tag to convertView 
} 
else { 
     // just recycle it if you have holder 
} 
if (cursor.moveToPosition(position)) { 
    String data = cursor.getString(cursor.getColumnIndex(Constants.COLUMN_NAME)); 
    if (data != null && data.length() > 0) { 
     TextView t = findViewById(R.id.someId); 
     t.setText(data); 
    } 
} 
+0

Dans ce cas, vous pouvez utiliser 'convertView = new TextView (context);' ou 'convertView = inflater.inflate (android.R.layout.simple_list_item_1);' puisque vous ne voulez pas utiliser de mise en page supplémentaire. – ebarrenechea

+0

Merci pour votre aide, je vais essayer maintenant .. je n'aimais pas la méthode de fabrication de ligne xml, parce que cette liste charge beaucoup de stuf de téléphone .. – user1798049

+0

textview doit être en ligne xml? ou je peux juste faire TextView tv = new TextView (mContext.getApplicationContext()); – user1798049