前言:前面已经介绍了一些Fragment的知识,那么这次我们以抽屉导航这个例子,来讲解Fragment之间的数据传递以及导航抽屉的实现
一、Fragment 之间的数据传递:
关于Fragment之间的数据传递,有两种情况:
1). 同一个container间的参数传递,即一个 Activity 中仅有一个 ContentView, 在该内容视图上进行 Fragment 的切换以及数据传递
2). 同一个Activity,不同container间的参数传递
那么针对这两种情况,我们以两个小案例来讲解这两种情况。
二、案例讲解:
1. 同一个container间的参数传递:
- 需求:依旧是模拟登录,首先显示登录界面,然后登陆成功后进入欢迎界面。并且欢迎界面上将显示登录时的用户名。效果如下:
- 代码实现:
- activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
-
- MainActivity.java:
/**
* Fragment间参数传递: 同一个container间的参数传递,即一个 Activity 中仅有一个 ContentView, 在
* 该内容视图上进行 Fragment 的切换以及数据传递
* @author johnnie
*
*/
public class MainActivity extends Activity{
private FragmentManager fm;
private FragmentTransaction ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fm = getFragmentManager();
ft = fm.beginTransaction();
ft.replace(R.id.content, new LoginFragment());
ft.commit();
}
}
-
- LoginFragment.java:
public class LoginFragment extends Fragment{
// 控件的声明
private EditText et_username;
private EditText et_userpass;
private Button btn_login;
private View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_login, container, false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
et_username = (EditText) view.findViewById(R.id.et_username);
et_userpass = (EditText) view.findViewById(R.id.et_userpass);
btn_login = (Button) view.findViewById(R.id.btn_login);
btn_login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
login();
}
});
}
/**
* 用户登录
*/
private void login() {
System.out.println("登录...");
// 获取用户输入
String username = et_username.getText().toString().trim();
String userpass = et_userpass.getText().toString().trim();
// 输入校验
boolean flag = false;
Strin