我有一個具有多個列表視圖的活動,它們持續接收來自套接字線程的新值,另一個線程解析數據並更新數組適配器,然後ui線程調用notifyDataSetChanged()要刷新的列表。Android ListView ArrayAdapter數據更新最佳實踐
我的問題是,即時刷新所有列表幾秒鐘一次,這導致了UI時,需要發生一些動畫非常laggy。
我想知道什麼是最好的方法是每秒更新多個值更改多個列表?
謝謝, 圖騰。
我有一個具有多個列表視圖的活動,它們持續接收來自套接字線程的新值,另一個線程解析數據並更新數組適配器,然後ui線程調用notifyDataSetChanged()要刷新的列表。Android ListView ArrayAdapter數據更新最佳實踐
我的問題是,即時刷新所有列表幾秒鐘一次,這導致了UI時,需要發生一些動畫非常laggy。
我想知道什麼是最好的方法是每秒更新多個值更改多個列表?
謝謝, 圖騰。
我肯定會遵循他們今年在Google IO上給出的指導方針。
您應該使用遊標(如果需要內容提供商)和ListActivity。 UI一旦發生變化就會自動更新,如果數據集爲空,列表會自動顯示相關視圖。
下面的例子來解決它使用內容提供商:
的main.xml:
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="wrap_content"></ListView>
<TextView android:id="@id/android:empty" android:layout_width="fill_parent"
android:gravity="center" android:layout_height="wrap_content"
android:text="No data, please refresh!" />
通知了android:列表和android:空標籤。這些是列表活動所必需的。
在onCreate()方法:
mCursor = getContentResolver().query(SOME_URI,
null, null, null, null);
ListView mListView = (ListView) findViewById(android.R.id.list);
mListView.setAdapter(new CustomCusorAdapter(getApplicationContext(),
mCursor));
您可以使用SimpleCursorAdapter如果你的意見是直截了當的。我由自己的適配器創建,因爲複雜的意見:
private class CustomCusorAdapter extends CursorAdapter {
public CustomCusorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Holder holder = (Holder) view.getTag();
holder.tv.setText(cursor.getString(cursor
.getColumnIndex(COL1_NAME)));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = getLayoutInflater().inflate(
R.layout.layout_xml, null);
Holder holder = new Holder();
holder.tv = (TextView) v
.findViewById(R.id.tv);
holder.cb= (CheckBox) v
.findViewById(R.id.cb);
v.setTag(holder);
return v;
}
}
private class Holder {
TextView tv;
CheckBox cb;
}
是的,該視頻是非常有幫助的。其中最大的取外賣的是,你應該回收convertView傳遞到您的列表適配器getView方法:
public View getView(int position, View convertView, ViewGroup parent){
if (convertView == null) {
convertView = mInflator.inflate(resource, parent, false);
}
//do any view bindings for the row
return convertView;
}
的其他有用的一點是使用一個ViewHolder類視圖循環。它在~10:30進入視頻。