Android------------fragment数据传递
一、activity向fragment的数值之间的传递
关键点:fragment.setArguments(bundle);---->activity发出的信息
Bundle bundle = getArguments();---->在fragment里面去接受信息
之间传递的关键函数fragemnt(自己创建的fragment去调用).setArgument(bundle) 和getArgument()
以下有许多注意事项:
MainActivity.java
public class MainActivity extends AppCompatActivity { private FragmentManager manager;
private FragmentTransaction transition;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.edit_content);
manager = getSupportFragmentManager();
transition = manager.beginTransaction();
transition.add(R.id.line_content, new ResultFragment());
transition.commit();
} public void SendMessage(View view){
String info = editText.getText().toString().trim();
ResultFragment result = new ResultFragment();
Bundle bundle = new Bundle();
bundle.putString("info",info);
result.setArguments(bundle); //即使是全局对象也要重新得到transition的对象,否则会抛出异常,单步调试F7或者F8就可以知道了
manager = getSupportFragmentManager();
transition = manager.beginTransaction();
transition.replace(R.id.line_content,result);
transition.commit(); }
} ResultFlagment.java
public class ResultFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.countfragment,null);
TextView textView = view.findViewById(R.id.textView);
Bundle bundle = getArguments(); //一定要对Bundle就行判断,否则会抛出bundle.getString()得不到字符串的异常
if(bundle != null)
{
String info = bundle.getString("info");
textView.setText(info);
}
return view;
}
} 二、fragmeng向activity传数值
注意事项:得到MyListner的对象一般在onCreate或者在onAttach()方法里面进行初始化
ResourceFragment.java
public class ResoureFragment extends Fragment {
private EditText editText;
private Button button;
private MyListner myListner; @Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myListner = (MyListner) getActivity();
Log.i("info111", "onCreate-------->myListner=="+myListner);
} @Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.resource,null);
button = view.findViewById(R.id.button);
editText = view.findViewById(R.id.edit_content); button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = editText.getText().toString().trim();
myListner.SendMessage(s);
}
}); return view;
}
public interface MyListner{
void SendMessage(String s);
}
} MainActivity.java的讲解
public class MainActivity extends AppCompatActivity implements ResoureFragment.MyListner {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.getText);
} @Override
public void SendMessage(String s) {
textView.setText(s);
}
} activity_main.xml文件
注意事项:
引用其他的fragment的时候一定加上它的属性ID,否则会报错
<fragment
android:id="@+id/line_exercise"
android:name="com.example.zhang.fragment_activity.ResoureFragment"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_marginTop="10dp" />
知识点的讲解:java的多态性
1.MainActivity extends AppCompatActivity implements ResoureFragment.MyListner
MainActivity是AppCompatActivity的子类,同时也是MyListner的子类 2.myListner = (MyListner) getActivity();
这一步的得到是fragment的当前的类的Activity的窗口,他又MyListner的子类,所以就出现回调函数这样的方法
举例说明:
A extent B
B b = new A();
其实b这个时候获得是A的对象,因为他也继承ResorceFragment这个抽象方法,和c++的virture很类似。
三、fragment和fragment的之间的数值传递
R.id.fragmentrigh和R.id.fragmentleft在xml文件中定义的
1.获取getFragmentmanager的fragment对象,通过findFragmentById找到对应的对象,然后调用它写方法
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.fragmentright);
rightFragment.setView(s); 2.获取getFragmentmanager的fragment对象,通过findFragmentById找到对应的对象,
然后再找到对应的view就可以进行findViewById
View rightFragment1 = getFragmentManager().findFragmentById(R.id.fragmentright).getView();
TextView textView =rightFragment1.findViewById(R.id.textView);
textView.setText(s); 3.通过得到getAvtivity的对象,调用findViewById的方法来找到控件
TextView textView = getActivity().findViewById(R.id.textView);
textView.setText(s); 四、DialogFragment的使用
好处:他不会随着activity的销毁而销毁(切换横竖屏的时候会用的)
Android------------fragment数据传递的更多相关文章
- Android Fragment之间传递List数据
要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...
- fragment 数据传递,传值,通信
[原][Fragment精深系列4]Fragment与Activity之间的数据交互 2015-5-26阅读389 评论0 以下内容来自于自己的实践和网络资料的整理,希望对你有帮助. 一.Acti ...
- fragment 数据传递,通信
Fragment之间的通信 在本节中,你会学到 1.定义接口 2.实现接口 3.将消息传递给fragment 为了重用Fragment UI 组件,在设计中你应该通过定义每一个fragemnt自己 ...
- Android图像数据传递到C++的一些坑
最近在做一个Android图象识别的app, 通过相机预览或者是拍照功能获取图像数据,然后将图像数据传递到本地C++的图像识别so库.在这个过程中花的时间最多的就是数据传输问题.谨以此坑,警示未来! ...
- Activity与Fragment数据传递之Fragment从Activity获取数据
整理Fragment与Activity之间的数据交换,大体上包括三种: 1.Fragment从Activity获取数据 2.Activity从Fragment获取数据 3.Fragment之间获取数据 ...
- Android 之数据传递小结
Android开发中,在不同模块(如Activity)间经常会有各种各样的数据需要相互传递,常用的的有五种传递方式.它们各有利弊,有各自的应用场景.下面分别介绍一下: 1. Intent对象传递简单数 ...
- Android开发——fragment中数据传递与刷新UI(更改控件)
数据传递: 1.通过数据库进行数据的传递 如在fragment中将数据保存在数据库中,之后其他的fragment或者activity直接读取数据库中的数据,数据库使用还算简单,这里就不多说,建议使用l ...
- Android Fragment间对象传递
由于Activity相对较为笨重,因而在日常的开发中很多时候会用到Fragment.然而Activity之间是通过Intent进行数据的传递,那Fragment是通过什么来进行传递的呢?Fragmen ...
- android Fragment与Activity交互,互相发数据(附图具体解释)
笔者最近看官方training.发现了非常多实用又好玩的知识. 当中.fragment与Activity通信就是一个. fragment与Activity通信主要是两点: 1.fragment传递信息 ...
- android第一行代码-3.activity之间的调用跟数据传递
前面两节所有应用都是同一个activity中的,是时候讲activity之间交互的操作了,此后会涉及到intent这个概念,这也算一个新的里程碑开始. 主要内容包括intent的使用,以及activi ...
随机推荐
- 在控制台远程连接mysql数据库时,出现ERROR 2049 (HY000)错误
问题的原因是,你本地的数据库版本过高,而远程的数据库版本低. 解决方法:在连接时加上 --skip-secure-auth 参数就可以了. mysql -h主机 -u用户名 -p密码 --skip- ...
- Spring框架的IOC之注解方式的快速入门
1. 步骤一:导入注解开发所有需要的jar包 * 引入IOC容器必须的6个jar包 * 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包 2. 步骤二:创建对应的包结构, ...
- StartServiceCtrlDispatcher
服务程序通常编写成控制台类型的应用程序,总的来说,一个遵守服务控制管理程序接口要求的程序 包含下面三个函数: 1.服务程序主函数(main):调用系统函数 StartServiceCtrlDispat ...
- break MISSING_BLOCK_LABEL_160; 看源代码出现的,源代码是反编译的
break MISSING_BLOCK_LABEL_160; FileNotFoundException fnfe; fnfe; out.close(); throw fnfe; in.close() ...
- 抓包之网络分析器- Wiresshark
https://www.wireshark.org/ Wireshark(前称Ethereal)是一个网络封包分析软件.网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料.Wi ...
- word-break:break-all; 和 word-wrap:break-word 换行
word-break:break-all; 和 word-wrap:break-word;两种写法都是让英文句子在父级宽度不够的情况下换行. 两个属性都同样是让文字换行,但存在着细微的区别,大部分时候 ...
- unidac 6.0.1 与kbmmw 的一点小摩擦
unidac 6.0.1 出来了,虽然支持sql server 直连等新特性,但是由于内部改动比较大, 导致与kmmmw 的集成起来存在有点小问题,就是如果数据库不是interbase 或者fire ...
- 2018.07.29~30 uoj#170. Picks loves segment tree VIII(线段树)
传送门 线段树好题. 维护区间取两种最值,区间加,求区间两种历史最值,区间最小值. 自己的写法调了一个晚上+一个上午+一个下午+一个晚上并没有调出来,90" role="prese ...
- Part 4 - Authentication(14-16)
from django.conf.urls import url from django.contrib import admin from django.contrib.auth import vi ...
- CentOS中的一些小技巧和特殊知识
一:软件: firefox 1.在tab栏右键可以打开上一次关闭的标签. 2.在上面的搜索栏可以添加搜索引擎,这样就不需要再打开标签页访问搜索引擎主页来搜索了. 3.获取firefox下载弹框的资源U ...