zoukankan      html  css  js  c++  java
  • android之间的各项信息传输类型

    首先是activity想fragment怎样动态的传输数据:

    一:activity与fragment之间进行数据传递是,在Activity中将要传递的数据封装在一Bundle中,使用setArgument(Bundel bundel)方法传递数据,在要传递到的Fragment中 使用this.getArgment(),得到传递到的Bundle。

    对于FrameLayout用于动态的更新fragment。这个只是带你比较重要:

    对应的一个activity中的代码点击事件如下:

    public class MainActivity extends AppCompatActivity  {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button button =(Button)findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FirstFragment fragment = new FirstFragment();
                    Bundle bundle = new Bundle();
                    bundle.putString("data","传递到的数据");
                    fragment.setArguments(bundle);//数据传递到fragment中
                    FragmentManager fragmentManager = getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.framelayout,fragment);
                    fragmentTransaction.commit();
                }
            });
     
        }
     
    }

    replace方法的第二个参数不能使用new 类名();这样数据是不能传递的。

    对于fragment重大代码如下:

    public class FirstFragment extends Fragment {
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_first,container,false);
            TextView textView = (TextView)view.findViewById(R.id.textview);
            Bundle bundle =this.getArguments();//得到从Activity传来的数据
            String mess = null;
            if(bundle!=null){
                mess = bundle.getString("data");
            }
            textView.setText(mess);
            return view;
        }
    
    }

    这样一来当按下Button的时候,碎片回加载进Framelayout中,并且bundle中的数据也会传递到fragment的textview中;

    还可以使用attach函数进行传递参数。

    二:activity与activity之间的数据传输第二种方法

    通过intent方式传递

    (1)传递字符串等

    发送端activity
    发送端activity
    接收端activity
    在这里插入图片描述

    (2)传递一个对象法1(Serializable是java中自带的方法数据存在内存中)

    三、Fragment获取Activity中的数据

    首先呢,我们可以通过Intent,直接携带参数传递,简单、方便。然而这种方法破坏了fragment的封装性,MainFragment不再是独立的构建单元,因为它现在由某个特定的activity托管,该activity的Intent定义了EXTRA_CRIME_ID的Extra无法在适用于其他任何activity
    Activity

    public static Intent newIntent(Context context, UUID crime_id){
    Intent intent = new Intent(context,MainActivity.class);
    intent.putExtra(EXTRA_CRIME_ID,crime_id);

    return intent;
    }
    Fragment

    UUID crimeId = (UUID) getActivity().getIntent().getSerializableExtra(MainActivity.EXTRA_CRIME_ID)
    crime = CrimeLab.get(getActivity()).getCrime(crimeId);
    第二种方法,附加argument给fragment,调用Fragmen.setArguments(Bundle)方法,而且必须在ftagment创建后,添加activity(托管fragment的activity)前完成。

    也就是说,再创建MainFragment实例时,直接把传递的数据传递过去,直接在MainFragment里面调用获取数据,所有的业务逻辑都在MainFragment里面实现,实现了模块的独立性。

    public static MainFragment newInstance(UUID crime_id) {
    Bundle bundle = new Bundle();
    bundle.putSerializable(ARG_CRIME_ID, crime_id);

    MainFragment fragment = new MainFragment();
    fragment.setArguments(bundle);
    return fragment;
    }
    获取argument
    先调用Fragment的getArguments()方法,再调用Bundle的限定类型getXxx()方法

    UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
    crime = CrimeLab.get(getActivity()).getCrime(crimeId);
    其实为了更好的实现模块的独立性,都是在获取数据的Activity或Fragment中创建静态方法实现具体的业务逻辑,而设置数据的Activity或Fragment负责调用静态方法,把需要传递的数据放入参数中即可。

  • 相关阅读:
    列表导航栏实例(01)
    点阵图形的高效旋转算法
    7种健康食物助抗初秋干燥
    打造自己的reset.css
    如何点击链接直接跳转到app store指定应用下载页面
    【iOSiap防护】验证用户付费收据!拒绝iap Cracker!拒绝iap Free!让iphone越狱用户无从下手!【2012年5月2日更新防护iap Free的方法】
    如何自定义协议从自己的一个app打开另一个app
    传统网站与Web标准——DIV+CSS布局实例
    ANSI、Unicode、Unicode big endian、UTF8编码
    良好的XHTML规则
  • 原文地址:https://www.cnblogs.com/dazhi151/p/12288371.html
Copyright © 2011-2022 走看看