• 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;
        }
    }

     

  • 相关阅读:
    expect 函数体 花括号
    bash 连接字符串
    Ubuntu下搭建Python开发环境
    expect
    >&2
    expect语法基础: while、for 循环、if 语句的用法示例
    bash exit
    python开发工具
    eclipse中安装adt出现了duplicate location错误怎样解决
    shell source
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/5334743.html
Copyright © 2020-2023  润新知