Fragment

把Fragment与Activity建立联系:

* 静态Fragment:在布局中增加<fragment>标签,通过class属性指定Fragment
* 动态Fragment:在Activity通过FragmentManager和FragmentTransaction管理Fragment
大部分情况下,建议使用动态Fragment
 
当使用动态Fragment时,可在Activity中使用如下方法来建立管理
FragmentManager fragmentManager = this.getFragmentManager();
FragmentTransaction tranaction = fragmentManager.beginTransaction(); 

当需要切换Fragment时,使用如下方法来切换

MyFragment fragment = new MyFragment();
transaction.replace(R.id.layout, fragment, "myFragment");
transaction.commit(); 

 Fragment中通过getActivity()获得当前所处的activity对象

MainActivity activity = (MainActivity)getActivity();
ListView listView = (ListView)activity.findViewById(R.id.listview); 

activity可以通过FragmentManager中的方法查找到Fragment

FragmentManager manager = getFragmentManager();
MyFragment fragment = (MyFragment)manager.findFragmentById(R.id.my_fragment); 

FragmentManager只能对Fragment进行查找、提取等操作

如果希望进行添加删除修改的操作,需要使用FragmentTransaction
FragmentManager对象通过如下方法可以获取FragmentTransaction
FragmentTransaction tranaction = fragmentManager.beginTransaction(); 

FragmentTransaction在事务提交前,可以把Fragment添加后退栈

addToBackStack(String name)

添加到后退栈后,如果进行后退的操作,就会返回前一个fragment,而不是直接退出应用了

 综合:
FragmentManager manager = this.getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
MyFragment fragment = new MyFragment();
transaction.add(R.id.linearlayout, fragment);
transaction.addToBackStack(null);
transaction.commit(); 

DialogFragment中通过如下方法显示对话框

show(FragmentManager manager, String tag)
show(FragmentTransaction transaction, String tag)

 例:

private ListView listview;
private ArrayAdapter<String> adapter;
private List<String> title; // 文章的标题
private List<String> content; // 文章的内容
private FragmentActivity activity; // 注意是FragmentActivity
// 定义FragmentManager和FragmentTransaction对象
private FragmentManager manager; // 管理一个个的Fragment
private FragmentTransaction transaction;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    // 通过inflater把layout中的布局转换成view
    View view = inflater.inflate(R.layout.left, null);
    // 添加title数据
    title = new ArrayList<String>();
    title.add("序言");
    title.add("第一章");
    title.add("第二章");
    // 添加content数据
    content = new ArrayList<String>();
    content.add("0000000");
    content.add("1111111");
    content.add("2222222");
    // 创建adapter对象
    activity = (FragmentActivity) getActivity(); // 获得Fragment对应的activity
    // 1. 获取FragmentManager对象
    manager = activity.getSupportFragmentManager();
    adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, title);
    // 设置listview显示的数据
    // listview = (ListView) view.findViewById(R.id.listview);
    // listview.setAdapter(adapter);
    setListAdapter(adapter); // ListFragment中的方法
    return view;
}

// ListFragment特有的重写方法
// 当List中一项被点击时 调用
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    FragmentRight right = new FragmentRight();
    switch (position) {
    case 0:
        // 给Fragment传递参数
        Bundle args0 = new Bundle();
        args0.putString("content", content.get(0));
        right.setArguments(args0);
        // 2 在合适的时候开始交易(点击按钮 触发事件……)
        transaction = manager.beginTransaction();
        // 3 添加对应的动态Fragment
        transaction.replace(R.id.right, // 动态fragment要添加到的地方(activity_main中的id)
                right, // 待添加的动态fragment对象
                "right"); // fragment的标签
        // 4 把当前fragment添加到后退栈中(可选 建议添加)按BACK时可以退回到上一个Fragment
        transaction.addToBackStack(null);
        // 5 提交
        transaction.commit();
        break;
    case 1:
        Bundle args1 = new Bundle();
        args1.putString("content", content.get(1));
        right.setArguments(args1);
        // 2 在合适的时候开始交易(点击按钮 触发事件……)
        transaction = manager.beginTransaction();
        // 3 添加对应的动态Fragment
        transaction.replace(R.id.right, // 动态fragment要添加到的地方(activity_main中的id)
                right, // 待添加的动态fragment对象
                "right"); // fragment的标签
        // 4 把当前fragment添加到后退栈中(可选 建议添加)按BACK时可以退回到上一个Fragment
        transaction.addToBackStack(null);
        // 5 提交
        transaction.commit();
        break;
    case 2:
        Bundle args2 = new Bundle();
        args2.putString("content", content.get(2));
        right.setArguments(args2);
        // 2 在合适的时候开始交易(点击按钮 触发事件……)
        transaction = manager.beginTransaction();
        // 3 添加对应的动态Fragment
        transaction.replace(R.id.right, // 动态fragment要添加到的地方(activity_main中的id)
                right, // 待添加的动态fragment对象
                "right"); // fragment的标签
        // 4 把当前fragment添加到后退栈中(可选 建议添加)按BACK时可以退回到上一个Fragment
        transaction.addToBackStack(null);
        // 5 提交
        transaction.commit();
        break;
    }
    super.onListItemClick(l, v, position, id);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.right, null);
    Bundle bundle = getArguments();
    String content = bundle.getString("content");
    TextView textview = (TextView) view.findViewById(R.id.textview);
    textview.setText(content);
    return view;
    
    
}

效果图:

class MyDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("标题");
        builder.setMessage("内容");
        AlertDialog dialog = builder.create();
        return dialog;
    }
}

 

posted @ 2016-03-29 21:01  嘉禾世兴  阅读(239)  评论(0编辑  收藏  举报