Android 繼承BaseAdapter適配器中的getView方法,導致的ListView條目出現重複解決辦法(轉載)

出現該問題原因爲在設置每個條目的值的時候,將設定值的代碼放在了判斷語句裏面,導致有些條目會重複。

對list不清楚導致的錯誤,特標記之。

錯誤代碼如下,設置應用名稱下面的幾行值,實踐證明,他們的賦值需要在判斷條件以外:

public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLog.i(TAG, "getView position = " + position);

        ViewHolder viewHolder = new ViewHolder();if (convertView == null) {
            convertView = mInflater.inflate(R.layout.apps_list_item, null);
            viewHolder.cb_installed = (CheckBox) convertView
                    .findViewById(R.id.cb_checkedApp);
            viewHolder.iv_appIcon = (ImageView) convertView
                    .findViewById(R.id.iv_app_icon);
            viewHolder.tv_appName = (TextView) convertView
                    .findViewById(R.id.tv_app_name);
            // 設置應用名稱
            String mAppName = mData.get(position);
            Log.i("new", "position " + position + " mAppName = " + mAppName);
            viewHolder.iv_appIcon.setImageResource(R.drawable.ic_launcher);
            viewHolder.tv_appName.setText(mAppName);
            viewHolder.cb_installed.setChecked(isSelected.get(position));
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder)convertView.getTag();
        }return convertView;        
    }

將這些賦值放在外面,修改後如下,正常了。

public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubLog.i(TAG, "getView position = " + position);

        ViewHolder viewHolder = new ViewHolder();if (convertView == null) {
            convertView = mInflater.inflate(R.layout.apps_list_item, null);
            viewHolder.cb_installed = (CheckBox) convertView
                    .findViewById(R.id.cb_checkedApp);
            viewHolder.iv_appIcon = (ImageView) convertView
                    .findViewById(R.id.iv_app_icon);
            viewHolder.tv_appName = (TextView) convertView
                    .findViewById(R.id.tv_app_name);
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder)convertView.getTag();
        }        
        // 設置應用名稱
        String mAppName = mData.get(position);
        Log.i("new", "position " + position + " mAppName = " + mAppName);
        viewHolder.iv_appIcon.setImageResource(R.drawable.ic_launcher);
        viewHolder.tv_appName.setText(mAppName);
        viewHolder.cb_installed.setChecked(isSelected.get(position));
        return convertView;        
    }






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章