0

複雑なコーディングを行った ListView があります。リストは、さまざまなビューを必要とするさまざまな種類のデータで頻繁に変更されます。まれに、見た目が異なるはずの行に対して、Android によって 1 つのビューが再利用されてしまうことがあります。表示されているデータが根本的に変化した場合にのみ発生するようです。プログラムで ListView のメモリをきれいに消去する方法があることを期待していました。これは可能ですか?

これが私のgetViewの始まりです:

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            SearchHolder holder = null;
            int type = getItemViewType(position);

            if (null == convertView) {
                holder = new SearchHolder();
                if (type == SEARCH_TYPE_FREETEXT) {
                    convertView = mInflater.inflate(R.layout.layout_search_item_freetext, null);
                    holder.txtText = (TextView) convertView.findViewById(R.id.search_itemname);
                    holder.vHeaderWrapper = (LinearLayout) convertView.findViewById(R.id.search_headerwrapper);
                    holder.txtHeader = (TextView) convertView.findViewById(R.id.search_header);
                }
                else {
                    if (items.get(position).mData == null) {
                        convertView = mInflater.inflate(R.layout.layout_loadmoreresults_white, null);
                    }
                    else {
                        convertView = mInflater.inflate(R.layout.layout_search_item, null);
                        holder.txtText = (TextView) convertView.findViewById(R.id.search_itemname);
                        holder.vHeaderWrapper = (LinearLayout) convertView.findViewById(R.id.search_headerwrapper);
                        holder.txtHeader = (TextView) convertView.findViewById(R.id.search_header);
                    }
                }
                convertView.setTag(holder);
            }
            else {
                holder = (SearchHolder)convertView.getTag();
            }
...
4

2 に答える 2

0

ListView は、リストをスクロールするときに「リサイクル」と呼ばれるものを実行します。必要なことは、getView()メソッドをオーバーライドして、リサイクルされている個々の listView アイテムを更新することです。デフォルトでは、Android はこれらのビューをクリアしません。ListView のリサイクルに関する次のリンクを確認してください。

http://mobile.cs.fsu.edu/the-nuance-of-android-listview-recycling-for-n00bs/

コードがなければ、これについて既に知っているかどうかを判断するのは困難ですが、私の経験では、これがそのような問題の原因です。

于 2012-08-28T19:10:29.863 に答える
0

リスト項目に複数のレイアウトを使用する場合は、getView() メソッドで毎回 xml から適切なレイアウトをインフレートすることをお勧めします。

于 2012-08-28T19:57:42.047 に答える