【发布时间】:2014-05-13 03:09:24
【问题描述】:
我有一个包含两个文本视图和一个按钮的列表视图。如果单击按钮,它将变为“停止”按钮图像,如果单击另一行的按钮,则上一个按钮将返回“播放”按钮图像,新行的按钮将变为“停止”按钮图像。所有这些都适用于前 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,并且在滚动时父布局变为空。
【问题讨论】:
-
什么是 mHihglightedPositions,它在哪里设置?
标签: java android android-layout button android-listview