我们给按钮设置监听器时,我们有可能希望给监听函数一个参数,或让该监听函数能够操作外面的变量,如下是一种愿望:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout. fragment_playlist, container, false );
for(int i=0;i<LocalConst.plCount;i++){
plChooser[i] = (Button)fragmentView.findViewById(tab2RadioId(i));
plChooser[i].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
((DirPlayerActivity)getActivity()).currentPlTab = i;//这个i访问不到
}
});
}
return fragmentView ;
}
但是遗憾的是,new出来的这个匿名内部类不能访问外面的参数i。
可以考虑先封装一个实现View.OnClickListener接口的类,然后再把这个类的对象当成监听器给按钮,利用这个类的构造函数来接收参数,如下:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
fragmentView = inflater.inflate(R.layout. fragment_playlist, container, false );
for (int i=0;i<LocalConst. plCount;i++){
plChooser [i] = (Button)fragmentView .findViewById(tab2RadioId(i));
plChooser [i].setOnClickListener( new PlChooser(i));
}
return fragmentView ;
}
class PlChooser implements View.OnClickListener{
int choosed ;
PlChooser( int i){//在这里接收i
choosed = i;
}
@Override
public void onClick(View v) {
((DirPlayerActivity)getActivity()). currentPlTab = choosed ;
}
}