簡體   English   中英

android ListView ViewHolder和類型

[英]android ListView ViewHolder and Type

我想要一個Listview適配器,其中每一行都使用它自己的convertview,因此無法將該convertview共享到另一行。 基本上,如果我有4行,我想有4個convertview。 當繪制第3行時,我應該獲得convertview#3

為此,我為每行設置了不同的類型(位置),我認為這可以解決問題。

public class myadapter extends BaseAdapter {
final List<String> mdata;

@Override
public int getCount() {
    return mdata.size();
}

@Override
public Object getItem(int p) {
    return p;
}

@Override
public long getItemId(int p) {
    return p;
}

@Override
public int getItemViewType(int p) {
    return p;
}

@Override
public int getViewTypeCount() {
    return mdata.size()  == 0  ? 1 :mdata.size() + 1;
}

@Override
public View getView(int p, View v, ViewGroup arg2) {
    ViewHolder holder = null;
    if (v == null) {
        v = li.inflate(R.layout.data, null);
        holder = new ViewHolder();
        holder._pos = p;
        Log.v("TAG", "creating holder pos " + p + " for " + mdata.get(p));

        {...}

        v.setTag(holder);
    } else {
        holder = (ViewHolder)v.getTag();
        Log.d("TAG", "get convert for " + mdata.get(p)+ " holder " + holder._pos);

    }
    {...}
    return v;
}
public static class ViewHolder {
    public TextView _textView;
    public int _pos;
}
}

注意,viewholder中的pos僅用於調試目的。

不幸的是,它顯示:

創建string0的持有人pos 0創建string1的持有人pos 1獲取string0持有人的轉換1獲取string0持有人的轉換0獲取string1持有人的轉換

如何為string0持有人1進行get轉換?

謝謝

當我復制粘貼您的代碼並設置以下字段時...

final List<String> mdata = Arrays.asList("s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10", "s11", "s12");

... iT以您期望的確切方式工作。
您確定您不會錯過對日志輸出的了解嗎?

我發現問題了

getViewTypeCount()

在程序執行期間無法更改。 即使使用較少,也必須將其設置為較大的值。 它必須是一個常數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM