1

块引用

我在 android 中使用 ExpandableListView

这是适配器类中getChildView的代码:

    @Override
    public View getChildView(int groupPosition, int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {
         ViewHolder holder; 
        if (convertView == null) {

            LayoutInflater inflater = (LayoutInflater) myContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.childrow, null);
            holder = new ViewHolder(); 

            holder.tv = (TextView) convertView
                    .findViewById(R.id.textView1);
                            // I added this line of code
                holder.stop = (Button) convertView.findViewById(R.id.button3);

            holder.position = groupPosition;
            convertView.setTag(holder);
            holder.stop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

               ViewHolder holder = new ViewHolder();
               holder = (ViewHolder) v.getTag();

                    int position = 0;

                        position = holder.position; ************* here

                    System.out.println("coolapse tag " + position);

                    expList.collapseGroup(position);


                }
            });

        } else {
             holder = (ViewHolder) convertView.getTag();
        }

        return convertView;
    }

它在**标记的行中给出 NullPointerException 有 什么问题?

4

1 回答 1

1

是什么holder.stopholder.stop不是你设置标签的视图,所以当你尝试做时v.getTag(),你会得到一个空值holder(顺便说一下,我没有看到holder.stop被初始化)。不确定您到底要做什么,但解决它的一种方法是将持有者也设置在stop视图上:

convertView.setTag(holder);
holder.stop.setTag(holder);
holder.stop.setOnClickListener(....
于 2012-04-08T18:15:33.120 回答