2015-10-31 145 views
0

我使用自定義陣列適配器將數據添加到自定義列表視圖 請告訴我,我怎麼能當我使用add()notifyDataSetChanged()添加項更新此ListView和適配器 首次我的列表視圖陣列適配器它的工作很好,但我第二次做同樣的,但它給我的錯誤,我讀的地方,我必須補充的方法,以我的適配器來處理這個喜歡addMoreItem什麼 ,這裏是我的適配器更新與自定義適配器列表視圖

public class StringArrayAdapter extends ArrayAdapter<ContentSetter> { 
ArrayList<ContentSetter> postList; 
private int mCount = 20; 
LayoutInflater myInflater; 
int Resource; 
ViewHolder holder; 

public StringArrayAdapter(Context c , int resource , ArrayList<ContentSetter> obj) { 
    super(c , resource ,obj); 
    myInflater = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    Resource = resource; 
    postList = obj; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     holder = new ViewHolder(); 
     v = myInflater.inflate(Resource, null); 
     holder.name = (TextView) v.findViewById(R.id.mahdi); 
    } else { 
     holder = (ViewHolder)v.getTag(); 
    } 
    holder.name.setText(postList.get(position).getPostId()); 
    return v; 
} 
static class ViewHolder{ 
    public TextView name; 
} 

}

+0

還提供了代碼,您在其中執行「add()」和「notifyDataSetChanged()」 。 –

+0

這可能是因爲您重新將實例傳遞給適配器構造函數的ArrayList 。 – Bubu

+0

發佈你的錯誤 –

回答

0

從您發佈的代碼:

第一:

請確保ArrayList<ContentSetter> obj不爲空。超類不檢查空值。

二:這裏

if (v == null) { 
    holder = new ViewHolder(); 
    v = myInflater.inflate(Resource, null); 
    holder.name = (TextView) v.findViewById(R.id.mahdi); 
} else { 
    holder = (ViewHolder)v.getTag(); 
} 

你需要調用v.setTag(holder),在if條件,你初始化holder後。

if (v == null) { 
    holder = new ViewHolder(); 
    v = myInflater.inflate(Resource, null); 
    holder.name = (TextView) v.findViewById(R.id.mahdi); 
    v.setTag(holder); 
} 

如果getPostId()是返回一個int,您應環繞周圍String.valueOf返回值。 setText的重載方法需要int嘗試查找本地化字符串,如果找不到匹配則拋出異常

+0

哇謝謝人終於它的工作,但我得到另一個問題,當我按下按鈕以前的數據,我得到了使用asynctask越來越刪除 –

相關問題