2013-02-19 75 views
0

我想设置listview行高度而不是自定义listview和新arrayadapter。 我将高度设置为LayoutParams.WRAP_CONTENT;我得到这个在logcat的listview row height

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) 

这里是我查看代码:

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

是否有任何特定的原因,你在getView中调用'System.gc()'这是一个经常被调用的函数? – 2013-02-19 19:47:34

回答

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)

您的错误意味着在某些情况下,getView()方法将返回null。 我从你的代码有点困惑,你无处膨胀convertView如果为null。

你的方法太混乱,不正确。我建议您为行创建XML布局,然后用此布局充填convertView,然后使用来自Cursor的数据设置适当的小部件(textViews)。

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

在这种情况下,您可以使用'convertView = new TextView(context);'或'convertView = inflater.inflate(android.R.layout.simple_list_item_1);'因为您不想使用额外的布局。 – ebarrenechea 2013-02-19 20:00:19

+0

感谢您的帮助,我现在试试这个..我不喜欢制作行xml的方法,导致这个listview从手机加载大量的stuf .. – user1798049 2013-02-19 20:00:42

+0

textview必须在行XML?或者我可以做TextView tv = new TextView(mContext.getApplicationContext()); – user1798049 2013-02-19 20:14:33