各位大哥大姐,帮小弟看一个小问题:
在getView()方法里初始化holder的时候convertView.findViewById(R.id.record_ico)这样取到的值都为null,不明白怎么回事?@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView != null) {
            holder = (ViewItemHolder) convertView.getTag();
        } else {
            convertView = inflater.inflate(R.layout.record_list, null);
            holder = new ViewItemHolder();
            holder.record_ico = (ImageView)convertView.findViewById(R.id.record_ico);
            holder.record_number = (TextView)convertView.findViewById(R.id.record_number);
            holder.record_time = (TextView)convertView.findViewById(R.id.record_time);
            holder.record_delete = (ImageButton)convertView.findViewById(R.id.record_delete);
            convertView.setTag(holder);
        }
        
        HashMap<String, Object> appInfo = appList.get(position);
        if (appInfo != null) {
         int recordIco =(Integer)appInfo.get("record_icon");
            String telNumber = (String) appInfo.get("record_number");
            String telTime = (String)appInfo.get("record_time");
            int deleteIco = (Integer)appInfo.get("record_delete");
            holder.record_ico.setImageDrawable(holder.record_ico.getResources().getDrawable( recordIco) );
            holder.record_number.setText(telNumber);
            holder.record_time.setText(telTime);
            holder.record_delete.setImageDrawable(holder.record_delete.getResources().getDrawable(deleteIco));
            holder.record_delete.setOnClickListener(new ListViewButtonListener(position));
        }        
        return convertView;
    }
然而初始化inflater的地方写在构造方法里的,感觉没问题呀public ButtonInListViewAdapter(Context c, ArrayList<HashMap<String, Object>> appList, int resource) {
        this.appList = appList;
        this.context = c;
        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
record_item.xml文件内容也贴出来了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:orientation="horizontal"
android:descendantFocusability="blocksDescendants"
>
<ImageView
android:id="@+id/record_ico"
android:layout_width="50dip"
android:layout_height="wrap_content"
android:src="@drawable/icon"
android:gravity="right"
android:layout_weight="1"
/>
<LinearLayout
android:layout_width="wrap_content" 
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="4"
>
<TextView
android:id="@+id/record_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
/>
<TextView
android:id="@+id/record_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
/>
</LinearLayout>
<ImageButton
android:id="@+id/record_delete"
android:layout_width="50dip"
android:layout_height="wrap_content"
android:src="@drawable/delete"
android:gravity="right"
android:layout_weight="1"
android:focusable="false"
/>
</LinearLayout>

解决方案 »

  1.   

    public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView != null) {
                holder = (ViewItemHolder) convertView.getTag();
            } else {
                convertView = inflater.inflate(R.layout.record_item, null);
                holder = new ViewItemHolder();
                holder.record_ico = (ImageView)convertView.findViewById(R.id.record_ico);
                holder.record_number = (TextView)convertView.findViewById(R.id.record_number);
                holder.record_time = (TextView)convertView.findViewById(R.id.record_time);
                holder.record_delete = (ImageButton)convertView.findViewById(R.id.record_delete);
                convertView.setTag(holder);
            }
            
            HashMap<String, Object> appInfo = appList.get(position);
            if (appInfo != null) {
                int recordIco =(Integer)appInfo.get("record_icon");
                String telNumber = (String) appInfo.get("record_number");
                String telTime = (String)appInfo.get("record_time");
                int deleteIco = (Integer)appInfo.get("record_delete");
                holder.record_ico.setImageDrawable(holder.record_ico.getResources().getDrawable( recordIco) );
                holder.record_number.setText(telNumber);
                holder.record_time.setText(telTime);
                holder.record_delete.setImageDrawable(holder.record_delete.getResources().getDrawable(deleteIco));
                holder.record_delete.setOnClickListener(new ListViewButtonListener(position));
            }        
            return convertView;
        }