Java Android Listview按钮点击

Java Android Listview按钮点击,java,android,android-layout,button,android-listview,Java,Android,Android Layout,Button,Android Listview,我有一个列表视图,它有两个文本视图和一个按钮。如果单击按钮,它将更改为停止按钮图像;如果单击另一行的按钮,则上一行的按钮将返回播放按钮图像,而新行的按钮将更改为停止按钮图像。所有这些都适用于前2-3行。向下滚动后,它停止工作,并给我一个NullPointerException。我猜这与listview的视图组回收有关。如果有人能帮我,那就太好了 以下是我的适配器onclicklistener的代码: @Override public View getView(final int

我有一个列表视图,它有两个文本视图和一个按钮。如果单击按钮,它将更改为停止按钮图像;如果单击另一行的按钮,则上一行的按钮将返回播放按钮图像,而新行的按钮将更改为停止按钮图像。所有这些都适用于前2-3行。向下滚动后,它停止工作,并给我一个NullPointerException。我猜这与listview的视图组回收有关。如果有人能帮我,那就太好了

以下是我的适配器onclicklistener的代码:

    @Override
    public View getView(final int pos, View ConvertView, ViewGroup parent) {

        final MyViewHolder holder;
        if (ConvertView == null){
            ConvertView = layoutinflater.inflate(R.layout.row, parent, false);
            holder = new MyViewHolder();        
            holder.plays = (ImageButton) ConvertView.findViewById(R.id.plays);
            holder.plays.setFocusable(false);
            holder.plays.setOnClickListener(this);
            parents = parent;
            }else{
                holder = (MyViewHolder)ConvertView.getTag();
            }


            play = playdata.get(pos);
            holder.posturl= play.getposturl();






            holder.plays.setTag(pos);    
            ConvertView.setTag(holder);



            if(mHighlightedPositions[pos]) {
                holder.plays.setImageResource(R.drawable.ic_action_stop);
            }else {
                holder.plays.setImageResource(R.drawable.ic_action_play);
            }





        play = playdata.get(pos);
        holder.play = play;

        return ConvertView;



    }

    @Override
    public void onClick(View view) {

        int position = (Integer)view.getTag();
            Log.d("clicked", "Button row pos click: " + position);


            // Toggle background resource
            LinearLayout layout = (LinearLayout)view.getParent();
            ImageButton button = (ImageButton)layout.getChildAt(3);

            if(initialposition!=-1)
            {if(mHighlightedPositions[position]) {
                button.setImageResource(R.drawable.ic_action_play);
                mHighlightedPositions[position] = false;
            }else {
                button.setImageResource(R.drawable.ic_action_stop);
                mHighlightedPositions[position] = true;
                mHighlightedPositions[initialposition]=false;
                LinearLayout parentlayout = (LinearLayout) parents.getChildAt(initialposition);
                ImageButton btn = (ImageButton) parentlayout.getChildAt(3);
                btn.setImageResource(R.drawable.ic_action_play);

            }
            }else {
                button.setImageResource(R.drawable.ic_action_stop);
                mHighlightedPositions[position] = true;
            }
            initialposition = position;
    }
感谢您的帮助!谢谢

编辑:我在这一点上得到了nullpointerexception:

LinearLayout parentlayout = (LinearLayout) parents.getChildAt(initialposition);
                    ImageButton btn = (ImageButton) parentlayout.getChildAt(3);
                    btn.setImageResource(R.drawable.ic_action_play);

此外,还记录了nullpointerexception,当滚动时parentlayout变为null

如果没有布局的第三个子级或没有布局,您应该捕获错误。尝试检查布局或按钮是否实际包含所需的内容:

LinearLayout layout = (LinearLayout)view.getParent();
if(layout != null) { 
    ImageButton button = (ImageButton)layout.getChildAt(3);
} else {
    Log.d("Error", "No Parent Layout");
}
if(button != null) {
    //do your stuff
} else {
    Log.d("Error", "No Third Child");
}

什么是mHihglightedPositions?它设置在哪里?