向监听类传递参数

来源:互联网 发布:网络迷情金紫阳小说TXT 编辑:程序博客网 时间:2024/06/05 20:30


我们给按钮设置监听器时,我们有可能希望给监听函数一个参数,或让该监听函数能够操作外面的变量,如下是一种愿望:

@Overridepublic 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(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stub((DirPlayerActivity)getActivity()).currentPlTab = i;//这个i访问不到}});}    return fragmentView ;}

但是遗憾的是,new出来的这个匿名内部类不能访问外面的参数i。

可以考虑先封装一个实现View.OnClickListener接口的类,然后再把这个类的对象当成监听器给按钮,利用这个类的构造函数来接收参数,如下:

@Overridepublic 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 ;        }}



0 0
原创粉丝点击