1、Fragment动态加载
Fragment动态加载:撰写代码将Fragment灵活添加到一个Activity 中。add()添加、remove()移除、替换等。
(1)处理Fragment事务
- FragmentManager fragmentManager = getFragmentManager(); //获得Fragment的管理者
- FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); //开启Fragment的事务,从而进行添加移除操作
FragmentManager fragmentManager = getFragmentManager(); //获得Fragment的管理者
FragmentTransaction beginTransaction = fragmentManager.beginTransaction(); //开启Fragment的事务,从而进行添加移除操作
每一个事务都是同时执行一套变化,可以在一个事务中设置你所有执行的变化,包括add()、remove()、replace(),然后提交给Activity(commit())。
如果允许用户通过按下BACK键返回到前一个Fragment状态,调用commit()之前还要加入addToBackStack()方法。
- case R.id.second:
- //演示动态加载
- DongTaiMyFragment dongTaiMyFragment=new DongTaiMyFragment();
- FragmentManager fragmentManager = getFragmentManager();
- FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
- beginTransaction.add(R.id.frame, dongTaiMyFragment); //通过事务去管理Fragment
- beginTransaction.addToBackStack(null); //处理返回键
- beginTransaction.commit(); //提交
- break;
case R.id.second:
//演示动态加载
DongTaiMyFragment dongTaiMyFragment=new DongTaiMyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
beginTransaction.add(R.id.frame, dongTaiMyFragment); //通过事务去管理Fragment
beginTransaction.addToBackStack(null); //处理返回键
beginTransaction.commit(); //提交
break;
2、与Activity传值通信
A. Fragment调用getActivity()方法获取它所在的Activity;Activity调用FragmentManager的findFragmentById()或者findFragmentByTag()方法获取Fragment;
B. Activity——》Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法;
Fragment——》Activity:需要在Fragment中定义一个内部回调接口,让包含该Fragment的Activity实现该回调接口。这样Fragment可调用回调方法将数据传递给Activity。
Activity:
- public class MainActivity extends Activity implements MyListenter{
- private EditText editText;
- private Button activitySendBtn;
- //private TextView textView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- editText=(EditText) findViewById(R.id.activitySendET);
- activitySendBtn=(Button) findViewById(R.id.btnSend);
- activitySendBtn.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- String text = editText.getText().toString();
- Bundle bundle=new Bundle();
- bundle.putString("name", text);
- MainFragment fragment=new MainFragment();
- fragment.setArguments(bundle);
- /*Intent intent=new Intent(MainActivity.this, FragmentActivity.class);
- startActivity(intent);*/
- //动态加载
- FragmentManager fragmentManager = getFragmentManager();
- FragmentTransaction transaction = fragmentManager.beginTransaction();
- transaction.add(R.id.activity, fragment,"fragment");
- transaction.commit();
- Toast.makeText(MainActivity.this,"向Fragment询问姓名:" + text, Toast.LENGTH_SHORT).show();
- }
- });
- //静态加载
- FragmentManager manager = getFragmentManager();
- Fragment findFragment = manager.findFragmentById(R.id.sendFragment);
- MainFragment frag=(MainFragment) findFragment;
- frag.setStr("Fragment静态传递值");
- }
- @Override
- public void answer(String name) {
- // TODO Auto-generated method stub
- Toast.makeText(MainActivity.this, "已成功接收到:"+name, Toast.LENGTH_LONG);
- }
- }
public class MainActivity extends Activity implements MyListenter{
private EditText editText;
private Button activitySendBtn;
//private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText=(EditText) findViewById(R.id.activitySendET);
activitySendBtn=(Button) findViewById(R.id.btnSend);
activitySendBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String text = editText.getText().toString();
Bundle bundle=new Bundle();
bundle.putString("name", text);
MainFragment fragment=new MainFragment();
fragment.setArguments(bundle);
/*Intent intent=new Intent(MainActivity.this, FragmentActivity.class);
startActivity(intent);*/
//动态加载
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.add(R.id.activity, fragment,"fragment");
transaction.commit();
Toast.makeText(MainActivity.this,"向Fragment询问姓名:" + text, Toast.LENGTH_SHORT).show();
}
});
//静态加载
FragmentManager manager = getFragmentManager();
Fragment findFragment = manager.findFragmentById(R.id.sendFragment);
MainFragment frag=(MainFragment) findFragment;
frag.setStr("Fragment静态传递值");
}
@Override
public void answer(String name) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "已成功接收到:"+name, Toast.LENGTH_LONG);
}
}
Fragment:
- public class MainFragment extends Fragment {
- private String name="Fragment回复姓名:Jone";
- private TextView textView;
- private Button button;
- //内部接口
- public interface MyListenter{
- public void answer(String name);
- }
- public MyListenter myListenter;
- @Override
- public void onAttach(Activity activity) {
- // TODO Auto-generated method stub
- myListenter=(MyListenter) activity;
- super.onAttach(activity);
- }
- //静态加载传递
- private String str="";
- public String getStr() {
- return str;
- }
- public void setStr(String str) {
- this.str = str;
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- View view =inflater.inflate(R.layout.fragment_main,container, false);
- textView=(TextView) view.findViewById(R.id.questionText);
- String text=getArguments().getString("name").toString();
- textView.setText(text);
- Toast.makeText(getActivity(), "成功接收到问题:"+text, Toast.LENGTH_SHORT).show();
- //
- myListenter.answer(name);
- //
- button=(Button) view.findViewById(R.id.fragBtn);
- button.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- String value=getStr();
- Toast.makeText(getActivity(), "value="+value, Toast.LENGTH_SHORT);
- }
- });
- return view;
- }
- }
public class MainFragment extends Fragment {
private String name="Fragment回复姓名:Jone";
private TextView textView;
private Button button;
//内部接口
public interface MyListenter{
public void answer(String name);
}
public MyListenter myListenter;
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
myListenter=(MyListenter) activity;
super.onAttach(activity);
}
//静态加载传递
private String str="";
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view =inflater.inflate(R.layout.fragment_main,container, false);
textView=(TextView) view.findViewById(R.id.questionText);
String text=getArguments().getString("name").toString();
textView.setText(text);
Toast.makeText(getActivity(), "成功接收到问题:"+text, Toast.LENGTH_SHORT).show();
//
myListenter.answer(name);
//
button=(Button) view.findViewById(R.id.fragBtn);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String value=getStr();
Toast.makeText(getActivity(), "value="+value, Toast.LENGTH_SHORT);
}
});
return view;
}
}