android之间的各项信息传输类型

敢说敢作敢为, 无怨无恨无悔。这篇文章主要讲述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
android之间的各项信息传输类型

文章图片

接收端activity
android之间的各项信息传输类型

文章图片

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

【android之间的各项信息传输类型】 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负责调用静态方法,把需要传递的数据放入参数中即可。



    推荐阅读