zoukankan      html  css  js  c++  java
  • Fragment与Activity相互传递值

    /**
    * 情况1.fragment向activity传递值:
    * 首先在fragment中写一个接口,fragment然后在需要传递值得地方调用接口里面的方法,在activity中实现这个接口并重写接口里面的方法
    * 情况2.点击Activity中的按钮(在Activity布局中,与ViewPager同级),在当前显示Fragment中的执行某些操作
    * 思路一:通过FragmentPagerAdapter.getItem()获取当前Fragment对象,调用执行Fragment中的public方法。
    * 思路二:在Activity中定义一个接口,Fragment实现这一接口
    */
    实例 通过点解RecyclerView的按钮,Activity作出相应改变
    ① RecyclerView的Adapter定义接口,调用接口
    ②Activity中实现接口
    
    //在Activity中
    gattDeviceAdapter.setViewAlphaItem(new MultiplayerGattDeviceAdapter.ViewAlpha() {
                @Override
                public void setConnectDeviceButtonAlpha(float alpha) {
                    connectSelectedDevice.setAlpha(alpha);
                }
                public void setConnectDeviceButtonClickable(boolean flag){
                    connectSelectedDevice.setClickable(flag);
                }
            });
    //GattDeviceAdapter中
    //    适配器中定义的接口,在活动中实现
        public interface ViewAlpha{
            void setConnectDeviceButtonAlpha(float alpha);
            void setConnectDeviceButtonClickable(boolean clickable);
        }
        public void setViewAlphaItem(ViewAlpha viewAlphaItem){
            this.viewAlphaItem=viewAlphaItem;
        }
        private ViewAlpha viewAlphaItem;
    

      

    //在适配器中使用接口
            viewHolder.addDeviceButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position=viewHolder.getAdapterPosition();
                    BluetoothDevice bluetoothDevice=bluetoothDeviceArrayList.get(position);
                    if(mScanning){
                        Toast.makeText(v.getContext(),"正在扫描",Toast.LENGTH_SHORT).show();
                        return;
                    }
                    if(viewHolder.addDeviceButton.getText().toString()=="添加"){
                        selectedBluetoothDeviceList.add(bluetoothDevice);
                        MultiplayerModeTrainingMainActivity.selectedBluetoothDeviceSize++;
    
                        viewAlphaItem.setConnectDeviceButtonAlpha(1f);//当添加了设备,设置不透明度为1
                        viewAlphaItem.setConnectDeviceButtonClickable(true);//当添加了设备,设置为可以点击
    
                        Log.d(TAG, "onClick: setConnectDeviceButtonAlpha=1f");
                        viewHolder.addDeviceButton.setText("删除");
                        viewHolder.addDeviceFlag.setVisibility(View.VISIBLE);
                        Log.d(TAG, "onClick: +"+"设备数目为="+selectedBluetoothDeviceList.size()+"地址为"+getAddress());
    
                    }else{
                        selectedBluetoothDeviceList.remove(bluetoothDevice);
                        MultiplayerModeTrainingMainActivity.selectedBluetoothDeviceSize--;
                        if(selectedBluetoothDeviceSize==0){
                            viewAlphaItem.setConnectDeviceButtonAlpha(0.5f);//当全部删除了设备,设置不透明度为0.5
                            viewAlphaItem.setConnectDeviceButtonClickable(false);//当删除了设备,设置为可以点击
                            Log.d(TAG, "onClick: setConnectDeviceButtonAlpha=0.5f");
                        }
                        viewHolder.addDeviceButton.setText("添加");
                        viewHolder.addDeviceFlag.setVisibility(View.INVISIBLE);
                        Log.d(TAG, "onClick: -"+"设备数目为="+selectedBluetoothDeviceList.size()+"地址为"+getAddress());
    
                    }
                }
            });


  • 相关阅读:
    好好学习天天向上之InfoPath学习系列(一):Form Services与InfoPath初识
    Windows Server 2008 R2 AD RMS管理(转)
    好好学习天天向上之InfoPath学习系列(零):写在最前面
    如何向妻子解释OOD(转)
    WCF下传递EF实体对象中出现异常:无法将 EntityReference 对象序列化
    生产信息集成分析平台(MIIAS V1.0) 概述
    Hadoop:分布式计算平台初探
    Junit单元测试配置及基本用法
    centos7安装maven
    docker安装redis
  • 原文地址:https://www.cnblogs.com/sunupo/p/10420127.html
Copyright © 2011-2022 走看看