convertView wird als null übergeben, auch wenn die Sicht vorhanden ist

Mir entwickelte android-Anwendung, wo Bild und text werden in einem raster angezeigt anzeigen und wenn der Benutzer scrollt nächsten zehn items(Bild und text) angezeigt werden. Das problem entsteht, wenn die getView-Methode des Adapters aufgerufen wird, nachdem adapter.notifyDataSetChanged() aufrufen. Der adapter recycelt die Daten, sondern die Positionen werden neu geordnet und wiederholt in der grid-Ansicht. Ich hatte nicht konfrontiert mit diesem problem, bis ich fügte hinzu, den Zustand zu überprüfen, wenn der convertView null ist.

Activity-Klasse :

public class DynamicListViewActivity extends Activity implements
    OnScrollListener {

int visibleElements;
int scrollState;
int count;
TextAdapter adapter = new TextAdapter();
int total=200;//total items limit in grid view


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.grid);
    count=10;
    GridView grid = (GridView) findViewById(R.id.gridview);
    grid.setAdapter(adapter);
    grid.setOnScrollListener(this);

}

public void onScroll(AbsListView view, int firstVisible, int visibleCount,
        int totalCount) {
    visibleElements= visibleCount;
}

public void onScrollStateChanged(AbsListView v, int s) {
    Log.d("ScrollState", s+"");
    scrollState=s;
    isScrollStateComplete();
}

public void isScrollStateComplete(){
if(visibleElements>0 && scrollState==SCROLL_STATE_IDLE && total>count){
        int diff=total-count;
        count+=(diff>=10)?10:diff;//update count to next ten items
        adapter.notifyDataSetChanged();
    }
}


class TextAdapter extends BaseAdapter {
    public int getCount() {
        return count;
    }

    public Object getItem(int pos) {
        return pos;
    }

    public long getItemId(int pos) {
        return pos;
    }

    public View getView(int pos, View convertView, ViewGroup p) {

        View v = convertView;
        System.out.println("pos : "+pos+" boolean "+(v==null));//log to check position and convertView
                  if(v==null){
            v =((LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.textlayout,null);

            ImageView iv = (ImageView) v.findViewById(R.id.album_thumbnail);
            iv.setImageDrawable(getResources().getDrawable(R.drawable.icon));

            TextView tvAlbumName = (TextView)v.findViewById(R.id.album_name);
            tvAlbumName.setText("postion "+pos);

            TextView tvAlbumDesc = (TextView)v.findViewById(R.id.album_description);
            tvAlbumDesc.setText("");

           }

          return v;
    }
}
}

Scrollen, bevor der grid-Ansicht korrekt dargestellt wird. Log :

08-05 14:24:34.440: INFO/ActivityManager(58): Starting activity: Intent {  act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.mis.list.demo/.DynamicListViewActivity }
08-05 14:24:34.642: INFO/System.out(685): pos : 0 boolean true
08-05 14:24:34.710: INFO/System.out(685): pos : 0 boolean false
08-05 14:24:34.710: INFO/System.out(685): pos : 1 boolean true
08-05 14:24:34.730: INFO/System.out(685): pos : 2 boolean true
08-05 14:24:34.800: INFO/System.out(685): pos : 3 boolean true
08-05 14:24:34.860: INFO/System.out(685): pos : 4 boolean true
08-05 14:24:34.880: INFO/System.out(685): pos : 5 boolean true
08-05 14:24:34.910: INFO/System.out(685): pos : 6 boolean true
08-05 14:24:34.920: INFO/System.out(685): pos : 7 boolean true
08-05 14:24:34.960: INFO/System.out(685): pos : 0 boolean true
08-05 14:24:35.030: INFO/ActivityManager(58): Displayed activity com.mis.list.demo/.DynamicListViewActivity: 520 ms (total 520 ms)

Nach ersten Ende scrollen

08-05 14:26:15.740: DEBUG/ScrollState(685): 1
08-05 14:26:15.830: DEBUG/dalvikvm(685): GC_EXTERNAL_ALLOC freed 3624 objects / 257464 bytes in 71ms
08-05 14:26:16.210: INFO/System.out(685): pos : 8 boolean false
08-05 14:26:16.210: INFO/System.out(685): pos : 9 boolean true
08-05 14:26:16.250: DEBUG/ScrollState(685): 0
08-05 14:26:16.260: INFO/System.out(685): pos : 0 boolean true
08-05 14:26:16.271: INFO/System.out(685): pos : 0 boolean false
08-05 14:26:16.271: INFO/System.out(685): pos : 1 boolean false
08-05 14:26:16.271: INFO/System.out(685): pos : 2 boolean false
08-05 14:26:16.271: INFO/System.out(685): pos : 3 boolean false
08-05 14:26:16.271: INFO/System.out(685): pos : 4 boolean false
08-05 14:26:16.271: INFO/System.out(685): pos : 5 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 6 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 7 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 8 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 9 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 10 boolean false
08-05 14:26:16.280: INFO/System.out(685): pos : 11 boolean true
08-05 14:26:16.371: DEBUG/dalvikvm(685): GC_EXTERNAL_ALLOC freed 644 objects / 33224 bytes in 41ms
08-05 14:26:45.270: WARN/KeyCharacterMap(685): No keyboard for id 0
08-05 14:26:45.270: WARN/KeyCharacterMap(685): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
08-05 14:26:45.341: INFO/System.out(685): pos : 12 boolean true
08-05 14:26:45.351: INFO/System.out(685): pos : 13 boolean true
08-05 14:26:45.371: INFO/System.out(685): pos : 14 boolean true
08-05 14:26:45.380: INFO/System.out(685): pos : 15 boolean true
08-05 14:26:45.450: INFO/System.out(685): pos : 16 boolean false
08-05 14:26:45.450: INFO/System.out(685): pos : 17 boolean false
08-05 14:26:45.460: INFO/System.out(685): pos : 18 boolean false
08-05 14:26:45.460: INFO/System.out(685): pos : 19 boolean false

Aber zeigt das raster mit wiederholten Werten und nicht in der Reihenfolge, die es sollte.
Sorry, ich bin nicht erlaubt, post Bilder, wie ich bin neuer Benutzer.

In der log sehe ich, dass für die position 0 der convertView==null wahr ist.

wie man dies Recht, wie ich planen, zu downloaden der Bilder in den Ort der android-Symbol für Bild-Ansicht derzeit verwendet wird.

Bitte helfen.

  • Falls keine Ansicht für die Wiederverwendung verfügbar, Android wird, übergeben Sie null für den parameter convertView
InformationsquelleAutor Megna | 2011-08-05
Schreibe einen Kommentar