Java Android Listview按钮点击
我有一个列表视图,它有两个文本视图和一个按钮。如果单击按钮,它将更改为停止按钮图像;如果单击另一行的按钮,则上一行的按钮将返回播放按钮图像,而新行的按钮将更改为停止按钮图像。所有这些都适用于前2-3行。向下滚动后,它停止工作,并给我一个NullPointerException。我猜这与listview的视图组回收有关。如果有人能帮我,那就太好了 以下是我的适配器onclicklistener的代码: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
@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?它设置在哪里?