Adapter模板

通常,很多人都是把Adapter內(nèi)嵌在Activity,而且Adapter的數(shù)據(jù)集合也是Activity的成員變量,因此經(jīng)常發(fā)生數(shù)據(jù)集合為null引起的崩潰,調(diào)用Adapter.notifySetDataChanged()界面有時候并沒有刷新。

建議保持一種Adapter編寫風(fēng)格,這樣可以方便錯誤排查,和ListView、GridView相關(guān)的Adapter全部都繼承BaseAdapter,并且數(shù)據(jù)字典由構(gòu)造函數(shù)直接注入,自定義刷新方法并傳入新數(shù)據(jù),確保界面的有效刷新。模板代碼如下:

public class TestAdapter<T> extends BaseAdapter {

    private List<T> mList;
    private Context mContext;

    
    public TestAdapter(List<T> mList, Context mContext) {
        super();
        this.mList = mList;
        this.mContext = mContext;
    }
    
    public void refresh(List<T> mList){
        this.mList = mList;
        this.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mList == null ? 0 : mList.size();
    }

    @Override
    public T getItem(int position) {
        return mList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if(convertView==null){
            convertView = View.inflate(mContext, R.layout.item_layout, null);
            holder = new ViewHolder();
            holder.ivTest = ViewUtils.findViewById(convertView, R.id.iv_test);
            holder.tvTest = ViewUtils.findViewById(convertView, R.id.tv_test);
            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }
       // TODO Auto-generated method stub
    
        return convertView;
    }

    static class ViewHolder {
        TextView tvTest;
        ImageView ivTest;
    }
}

可能覺得有點老生常談,對于初學(xué)者而言,看起來似乎都會寫,但能夠保證不出問題,就是一種能力了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容