2017-08-13 64 views
2

我已经问过这个问题几乎每个人都得到了同样的答案。getView()方法,CheckBox和setOnClickListener()

问题:我设计了一个自定义适配器,因为我的ListView行有一个复选框和一个TextView。 getView()方法有一个setOnClickListener()方法,当我点击应用程序中的复选框时,是使用setOnClickListener()调用getView()方法还是只执行setOnClickListener()方法?

答案:只执行setOnClickListener()。

新问题:如果是这样,单击在ListView的第三行的复选框时,如何为pos变量设置为2(它已必须是2,因为第三排的指数是2,但什么分配2到pos) ?

public View getView(int position, View convertView, ViewGroup parent){ 


    View rowView = myInflater.inflate(R.layout.model_row, null); 
    final int pos = position; 

    TextView textView = (TextView) rowView.findViewById(R.id.text); 
    final CheckBox checkBox = (CheckBox) rowView.findViewById(R.id.checkbox); 

    textView.setText(myList.get(position).getContent()); 


    checkBox.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 

      if(checkBox.isChecked()){ 
       myList.get(pos).setChecking(checkControl.Checked); 
      } 

      else{ 
       myList.get(pos).setChecking(checkControl.NonChecked); 
      } 
     } 
    }); 

    return rowView; 
} 

回答

2

View.OnClickListener是您的代码中的匿名内部类。在Java中,如果匿名类访问外部类中的任何变量,则当您创建匿名类的实例时,这些值将通过自动生成的构造函数自动复制到匿名类中。

在您的代码中,OnClickListener正在访问整数pos。您正在将视图的position分配给整数pos,并且由于OnClickListener正在访问该整数,因此将其复制到匿名类中。

+0

谢谢你的好解释 – Goktug