Fragment进阶1——Fragment与Activity之间的通信与切换
2016-04-13 11:23
260 查看
本节再说一个Activity和Fragment之间通信的例子,系统有以下功能:在主activity下方有三个按钮,分别是send、record、common
msg。当单击按钮时,来切换上方的fragment,用以显示不同的内容。
当单击send按钮时,从MainActivity中把EditText中的值传到Fragment中,然后把Fragment动态的显示在MainActivity中。
所用的知识点:
1.从MainActivity中把EditText中的值传到fragment中。
2.Fragment动态的显示在MainActivity中。
FragmentSend.java文件很简单,看一下布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/edit_fragment_send_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
</TextView>
</RelativeLayout>
在MainActivity中写点击事件
private OnClickListener sendListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 获取fragment中的text控件,可以在MainActivity中直接获取fragment中的控件
TextView showView = (TextView) findViewById(R.id.edit_fragment_send_msg);
// 得到EditText中的内容
String message = mEditText.getText().toString();
mStringBuffer = mStringBuffer.append(message).append("\n");
String text = "";
// 防止字符过长
if (mStringBuffer.length() > 100) {
text = mStringBuffer.substring(mStringBuffer.length() - 100,
mStringBuffer.length() - 1).toString();
} else {
text = mStringBuffer.toString();
}
showView.setText(text);
// 将获取的值放置到intent中,方便以后再fragment中获取
getIntent().putExtra("str", mStringBuffer.toString());
}
};
当单击record按钮时,获取到前面所有发送的内容。所用到的知识点:
1.如何获取MainActivity中的数据(刚才发送的数据放在MainActivity中的字符缓存中)
2.从一个fragment切换到另一个fragment中。
继续在MainActivity中写一个点击事件
private OnClickListener recordListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentRecord fragmentRecord = new FragmentRecord();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.framelayout_fragment_main,
fragmentRecord);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
};
当单击common msg按钮时会弹出一个列表,用户点击列表选项会将字符值返回到主EditText上。
所用到的知识点:
1.利用ListView控件显示数据
2.从一个fragment切换到另一个fragment中
3.fragment把值传递到MainActivity中
同样在MainActivity中写一个点击事件
private OnClickListener commonListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentCommon fragmentCommon = new FragmentCommon();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.framelayout_fragment_main,
fragmentCommon);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
};
现在补齐MainActivity类文件
public class MainActivity extends Activity {
private EditText mEditText;
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
private Button mButtonSend;
private Button mButtonRecord;
private Button mButtonCommon;
private StringBuffer mStringBuffer;
String TAG = "tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
mStringBuffer = new StringBuffer();
mButtonSend = (Button) findViewById(R.id.btn_main_send);
mButtonRecord = (Button) findViewById(R.id.btn_main_record);
mButtonCommon = (Button) findViewById(R.id.btn_main_common);
mEditText = (EditText) findViewById(R.id.edit_main_msg);
mButtonSend.setOnClickListener(sendListener);
mButtonRecord.setOnClickListener(recordListener);
mButtonCommon.setOnClickListener(commonListener);
mFragmentManager = getFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
//必须先初始化一个fragment,防止获取不到对应fragment中控件
if (savedInstanceState == null) {
FragmentSend fragmentSend = new FragmentSend();
mFragmentTransaction.add(R.id.framelayout_fragment_main,
fragmentSend, "SEND");
// 加入到后台栈中
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
}
}
最后的实现结果如下:
源代码
参考:
http://www.th7.cn/Program/Android/201405/198432.shtml
http://dwtedx.com/itshare_296.html
msg。当单击按钮时,来切换上方的fragment,用以显示不同的内容。
当单击send按钮时,从MainActivity中把EditText中的值传到Fragment中,然后把Fragment动态的显示在MainActivity中。
所用的知识点:
1.从MainActivity中把EditText中的值传到fragment中。
2.Fragment动态的显示在MainActivity中。
FragmentSend.java文件很简单,看一下布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/edit_fragment_send_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true" >
</TextView>
</RelativeLayout>
在MainActivity中写点击事件
private OnClickListener sendListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 获取fragment中的text控件,可以在MainActivity中直接获取fragment中的控件
TextView showView = (TextView) findViewById(R.id.edit_fragment_send_msg);
// 得到EditText中的内容
String message = mEditText.getText().toString();
mStringBuffer = mStringBuffer.append(message).append("\n");
String text = "";
// 防止字符过长
if (mStringBuffer.length() > 100) {
text = mStringBuffer.substring(mStringBuffer.length() - 100,
mStringBuffer.length() - 1).toString();
} else {
text = mStringBuffer.toString();
}
showView.setText(text);
// 将获取的值放置到intent中,方便以后再fragment中获取
getIntent().putExtra("str", mStringBuffer.toString());
}
};
当单击record按钮时,获取到前面所有发送的内容。所用到的知识点:
1.如何获取MainActivity中的数据(刚才发送的数据放在MainActivity中的字符缓存中)
2.从一个fragment切换到另一个fragment中。
继续在MainActivity中写一个点击事件
private OnClickListener recordListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentRecord fragmentRecord = new FragmentRecord();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.framelayout_fragment_main,
fragmentRecord);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
};
当单击common msg按钮时会弹出一个列表,用户点击列表选项会将字符值返回到主EditText上。
所用到的知识点:
1.利用ListView控件显示数据
2.从一个fragment切换到另一个fragment中
3.fragment把值传递到MainActivity中
同样在MainActivity中写一个点击事件
private OnClickListener commonListener = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
FragmentCommon fragmentCommon = new FragmentCommon();
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.framelayout_fragment_main,
fragmentCommon);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
};
现在补齐MainActivity类文件
public class MainActivity extends Activity {
private EditText mEditText;
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
private Button mButtonSend;
private Button mButtonRecord;
private Button mButtonCommon;
private StringBuffer mStringBuffer;
String TAG = "tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
mStringBuffer = new StringBuffer();
mButtonSend = (Button) findViewById(R.id.btn_main_send);
mButtonRecord = (Button) findViewById(R.id.btn_main_record);
mButtonCommon = (Button) findViewById(R.id.btn_main_common);
mEditText = (EditText) findViewById(R.id.edit_main_msg);
mButtonSend.setOnClickListener(sendListener);
mButtonRecord.setOnClickListener(recordListener);
mButtonCommon.setOnClickListener(commonListener);
mFragmentManager = getFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
//必须先初始化一个fragment,防止获取不到对应fragment中控件
if (savedInstanceState == null) {
FragmentSend fragmentSend = new FragmentSend();
mFragmentTransaction.add(R.id.framelayout_fragment_main,
fragmentSend, "SEND");
// 加入到后台栈中
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
}
}
最后的实现结果如下:
源代码
参考:
http://www.th7.cn/Program/Android/201405/198432.shtml
http://dwtedx.com/itshare_296.html
相关文章推荐
- PAT (Basic Level) Practise (中文)1020. 月饼 (25)
- sonatype nexus 搭建maven服务器二
- 【ios开发】教你如何建一个小的model,来接受后台传过来的字典或者数组
- python 的日志logging模块学习
- Oracle录屏命令spool的使用
- android利用jni调用第三方库——第三篇——编写库android程序整合第三方库libhello.so到自己的库libhelloword.so
- C语言如何求两个数的最大公约数和最小公倍数。
- 【mail】邮件查看和分发
- 头文件与函数定义分离
- cache缓存
- [Java] 匿名内部类
- Oracle Hang Manager
- QT生成excel文件
- LeetCode Power of Three JAVA
- chpasswd
- 最长回文子序列问题
- 【走过的弯路】有些板载发现不了OAD服务
- MySQL对换2张表的表名
- CocoaPod的安装
- 【c语言】模拟实现库函数的atof函数