2014-05-12 197 views
0

我有一个列表视图有两个textviews和一个按钮。如果按钮被点击,则它变成“停止”按钮图像,并且如果另一行按钮被点击,则前一个按钮返回到“播放”按钮图像,并且新行按钮变成“停止”按钮图像。所有这些都为第2-3行工作。滚动后,它停止工作,并给我一个NullPointerException。我猜它与listview的视图组回收有关。如果任何人都可以帮助我,这将会很棒。Android的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变成空时,它的。

+0

是什么mHihglightedPositions和它在哪儿设置? – zgc7009

回答

0

如果没有布局的第三个孩子或者没有布局,您应该捕获错误。尝试检查,layoutbutton是否真的有内容你想要的:

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"); 
}