2011-11-25 73 views
1

我有以下问题。我有一个ListView,我正在使用延伸ArrayAdapter类的自定义适配器。在每一行中有一个关于Button,当我点击它时,我需要改变它的风格。如何更新ArrayAdapter的getView方法中的视图?

到目前为止,我有:

public View getView(final int position, View convertView, ViewGroup parent) { 
     View vi = convertView; 

     if (convertView == null) { 
      vi = inflater.inflate(R.layout.people_item, null); 

      mViewHolder = new ViewHolder();    
      mViewHolder.follow = (Button) vi.findViewById(R.id.people_item_btn_follow); 
      mViewHolder.name = (TextView).... 
      vi.setTag(mViewHolder);   
     } else { 
      mViewHolder = (ViewHolder) convertView.getTag(); 
     } 

     mViewHolder.follow.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Changing the style of the button 
       if(mData[position].getFollow().equals("0")) { 
        mViewHolder.follow.setBackgroundDrawable(mCtx.getResources().getDrawable(R.drawable.unfollow_button_border)); 
        mViewHolder.follow.setText(mCtx.getString(R.string.unfollow)); 
       } else { 
        mViewHolder.follow.setBackgroundDrawable(mCtx.getResources().getDrawable(R.drawable.follow_button_border)); 
        mViewHolder.follow.setText(mCtx.getString(R.string.follow)); 
       } 

       mSharedAsyncTasks.getFollowerTask().execute(mData[position].getId()); 
      } 
     }); 

     if(mData[position] != null) { 
      // Setting data 
     } 

     return vi; 
    } 

private static class ViewHolder { 
    TextView fullName; 
    Button follow; 
} 

的问题是,在任何一行的按钮点击时,新的风格是在另一行的按钮应用(虽然被应用于以下的效果到右边一排)。

我知道它与行正在回收/重用的事实有关。

但如何真正解决这个问题?

谢谢!

回答

1

不确定你想要做以下事情。

public void onClick(View v) { 
     mViewHolder.follow.setBackgroundDrawable(mCtx.getResources().getDrawable(R.drawable.unfollow_button_border)); 
     ... 
} 

具体而言,我认为这个问题是你引用mViewHolder它看起来像它挂在和滚动可以指向任何按钮。它的一个范围问题,你应该能够解决以下问题。在onClick(View v)v我相信是你点击的按钮。

相反,你应该能够做到以下

public void onClick(View v) { 
     ((Button)v).setBackgroundDrawable(mCtx.getResources().getDrawable(R.drawable.unfollow_button_border)); 
     ... 
} 
+0

当然!谢谢埃米尔! –

相关问题