Recentemente ho riscontrato un problema in cui l'animazione di un numero indeterminato ProgressBar
utilizzato all'interno di una riga ListView
è diventato instabile. In poche parole, ho un ListView
in cui ogni riga contiene un ProgressBar
. Le animazioni sembrano grandi, finché non scorrono; da quel momento, almeno uno degli ProgressBar
avrà un'animazione aleatoria.Choppy ProgressBar prestazioni quando utilizzato in ListView
Qualcuno sa come risolvere questo problema?
View per la riga ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:indeterminate="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Semplice personalizzato ArrayAdapter
public class MyAdapter extends ArrayAdapter {
List list;
public MyAdapter(Context context, List objects) {
super(context, 0, objects);
list = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = ((LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.list_row, parent, false);
}
return convertView;
}
}
OnCreate() metodo per il campione Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
ListView listView = (ListView)findViewById(R.id.list_view);
ArrayList<Integer> data = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,16,17));
MyAdapter adapter = new MyAdapter(this, data);
listView.setAdapter(adapter);
}
Bug registrato (contiene progetto di esempio): https://code.google.com/p/android/issues/detail?id=145569&thanks=145569&ts=1423673226
In questo caso, non credo che il modello di vista titolare sarà di aiuto. In genere, il pattern del view view viene utilizzato per ridurre il numero di chiamate 'findViewById', che possono influire negativamente sulle prestazioni (in genere, per le prestazioni di scorrimento elenco). In questo esempio, non chiamo mai 'findViewById', quindi l'uso del pattern di visualizzazione non sembra che risolverà il problema. –
@Eric Farraro hai ragione. Ma sono curioso di sapere se RecyclerView si comporta allo stesso modo. Lo hai provato con un LinearLayoutManager? – cybergen
@cybergen, dopo il tuo suggerimento, ho provato anche un semplice RecyclerView/LinearLayoutManager. Sembra funzionare molto meglio e non ho osservato lo stesso problema nell'animazione. Sembra che il bug potrebbe essere specificamente con l'animazione ListView/ProgressBar. –