zoukankan      html  css  js  c++  java
  • Android攻城狮fragment

     

     1 //1,fragment静态加载:MainActivity    MainActivty1_2  Myfragment1
     2 //2,fragment动态加载  :MainActivity   Myfragment2
     3 //3,fragment生命周期:  Myfragment4_life
     4 //4,fragment和:Activity之间通信:::MainActivity4 Myfragment5
     5 public class MainActivity extends Activity implements OnCheckedChangeListener {
     6     private RadioGroup group;
     7 
     8     @Override
     9     protected void onCreate(Bundle savedInstanceState) {
    10         super.onCreate(savedInstanceState);
    11         setContentView(R.layout.main);
    12         group = (RadioGroup) findViewById(R.id.radioGroup1);
    13         group.setOnCheckedChangeListener(this);
    14 
    15     } 
    16 
    17     @Override
    18     public void onCheckedChanged(RadioGroup group, int checkedId) {
    19         // TODO Auto-generated method stub
    20         switch (checkedId) {
    21         case R.id.radio0: {
    22             //静态加载fragment:
    23             //第一个Activity跳转Activity1_2(xml布局中是含有android:name="com.example.fragment.Myfragment1"的fragment标签)
    24             //Myfragment1类继承fragment
    25             //Myfragment1类中的xml布局含有TextView和Button
    26             Intent intent = new Intent(MainActivity.this, MainActivty1_2.class);
    27             startActivity(intent);
    28             break;
    29         }
    30              //动态加载fragment:
    31         case R.id.radio1: {
    32             //创建Myfragment2类继承fragment
    33             //Myfragment2类中的xml布局含有TextView和Button
    34             //把fragment2添加到main中的xml中的 LinearLayout布局(id=R.id.frame)
    35             Myfragment2 fragment2 = new Myfragment2();
    36             FragmentManager fragmentManager = getFragmentManager();
    37             FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
    38             beginTransaction.add(R.id.frame, fragment2);//把fragment2添加到拿个布局
    39             beginTransaction.addToBackStack(null);//设置物理连接返回键
    40             beginTransaction.commit();
    41 
    42             break;
    43         }
    44         case R.id.radio2: {
    45 
    46             break;
    47         }
    48 
    49         case R.id.radio3: {
    50             Intent intent = new Intent(MainActivity.this, MainActivity4.class);
    51             startActivity(intent);
    52 
    53             break;
    54         }
    55 
    56         }
    57     }
    58 
    59 }
     1 public class MainActivty1_2 extends Activity {
     2 
     3     private TextView textView;
     4 
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         // TODO Auto-generated method stub
     8         super.onCreate(savedInstanceState);
     9         setContentView(R.layout.main2);
    10         Button button = (Button) findViewById(R.id.but);
    11         button.setText("改变");
    12         textView = (TextView) findViewById(R.id.text);
    13         button.setOnClickListener(new OnClickListener() {
    14 
    15             @Override
    16             public void onClick(View v) {
    17                 // TODO Auto-generated method stub
    18                 textView.setText("textView改变了");
    19             }
    20         });
    21     }
    22 }
    public class Fragment1 extends android.support.v4.app.Fragment {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            return inflater.inflate(R.layout.view1, container, false);
        }
    }
     1 public class Myfragment2 extends Fragment{
     2 
     3     
     4     @Override
     5     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     6             Bundle savedInstanceState) {
     7         // TODO Auto-generated method stub
     8         //resource:需要加载的布局文件
     9         //root:layout的viewGrup
    10         // attachToRoot:false 不返回父viewGrup
    11         View view = inflater.inflate(R.layout.fragment, container, false);
    12         TextView textView=(TextView) view.findViewById(R.id.text);
    13         textView.setText("动态加载fragment");
    14         return  view;
    15     }
    16     
    17 }
    、、//--------------------生命周期--------------------
     1 public class Myfragment4_life extends Fragment {
     2 
     3     // 1.当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
     4     @Override
     5     public void onAttach(Activity activity) {
     6         // TODO Auto-generated method stub
     7         super.onAttach(activity);
     8     }
     9 
    10     // 2.创建fragment时会回调,只调用一次
    11     @Override
    12     public void onCreate(Bundle savedInstanceState) {
    13         // TODO Auto-generated method stub
    14         super.onCreate(savedInstanceState);
    15     }
    16 
    17     // 3.每次创建都会绘制Fragment的view组件时回调该方法
    18     @Override
    19     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    20             Bundle savedInstanceState) {
    21         // TODO Auto-generated method stub
    22         View view = inflater.inflate(R.layout.fragment, container, false);
    23         TextView textView = (TextView) view.findViewById(R.id.text);
    24 
    25         return view;
    26     }
    27 
    28     // 4.当fragment所在的Activity启动完成后调用
    29     @Override
    30     public void onActivityCreated(Bundle savedInstanceState) {
    31         // TODO Auto-generated method stub
    32         super.onActivityCreated(savedInstanceState);
    33     }
    34 
    35     // 5.进入启动fragment
    36     @Override
    37     public void onStart() {
    38         // TODO Auto-generated method stub
    39         super.onStart();
    40     }
    41 
    42     // 6.恢复fragment时会被调用,调用onStart()方法后面一定会调用onResume()
    43     @Override
    44     public void onResume() {
    45         // TODO Auto-generated method stub
    46         super.onResume();
    47     }
    48 
    49     // 7.暂停fragment时会被调用
    50     @Override
    51     public void onPause() {
    52         // TODO Auto-generated method stub
    53         super.onPause();
    54     }
    55 
    56     // 8.停止fragment时会被调用
    57     @Override
    58     public void onStop() {
    59         // TODO Auto-generated method stub
    60         super.onStop();
    61     }
    62 
    63     // 9.销毁fragment所包含的view组件时
    64     @Override
    65     public void onDestroyView() {
    66         // TODO Auto-generated method stub
    67         super.onDestroyView();
    68     }
    69 
    70     // 10.销毁fragment时会被调用
    71     @Override
    72     public void onDestroy() {
    73         // TODO Auto-generated method stub
    74         super.onDestroy();
    75     }
    76 
    77     // 11.fragment从activity中删除时会回调该方法。只调用一次
    78     @Override
    79     public void onDetach() {
    80         // TODO Auto-generated method stub
    81         super.onDetach();
    82     }
    83 }
    
    

    //---------------------fragment与activity通信----------------------------

    
    
    //        Fragment与Activity通信
    //        (1)Fragment可以调用getActivity()方法获取它所在的Activity;
    //        (2)Activity可以调用FragmentManager的findFragmentById()
    //          或者findFragmentByTag()方法获取Fragment。
    
    //          Activity --> Fragment:在Activity中创建Bundle数据包,
    //        并调用Fragment的setArguments(Bundle bundle)方法,
    //        然后在Fragment中使用getArguments()获取Bundle数据包。
    
    //        Fragment --> Activity:需要在Fragment中定义一个内部回调接口,
    //        再让包含该Fragment的Activity实现该回调接口。
    //        这样Fragment可调用该回调方法将数据传递给Activity。
    public class MainActivity4 extends Activity implements MyListener {
        private Button button;
        private EditText editText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main4);
            button = (Button) findViewById(R.id.send);
            editText = (EditText) findViewById(R.id.editText);
            button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    String text = editText.getText().toString().trim();
                    Myfragment5 fMyfragment5 = new Myfragment5();
    //                  Activity --> Fragment:在Activity中创建Bundle数据包,
    //                并调用Fragment的setArguments(Bundle bundle)方法,
    //                然后在Fragment中使用getArguments()获取Bundle数据包。
                    Bundle bundle = new Bundle();
                    bundle.putString("name", text);
                    fMyfragment5.setArguments(bundle);
                    
                    FragmentManager fragmentManager = getFragmentManager();
                    FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
                    beginTransaction.add(R.id.layout, fMyfragment5, "fragment5");
                    beginTransaction.commit();
                    Toast.makeText(MainActivity4.this, "向fragment发送数据"+text, 1).show();
                }
            });
            
            // 静态加载
            FragmentManager fragmentManager = getFragmentManager();
            Fragment findFragmentById = fragmentManager.findFragmentById(R.id.f);
            Myfragment1 frag = (Myfragment1) findFragmentById;
            frag.setAa("xxxxxxxxxxxx静态传值xxx");
    
        }
    
        @Override
        public void thank(String code) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity4.this, "成功接收到。。"+code, 1).show();
        }
    }


     1 public class Myfragment5 extends Fragment {
     2     private String code = "thank you";
     3     public MyListener listener;
     4 //    Fragment --> Activity:需要在Fragment中定义一个内部回调接口,
     5 //    再让包含该Fragment的Activity实现该回调接口。class MainActivity4 extends Activity implements MyListener
     6 //    这样Fragment可调用该回调方法将数据传递给Activity。
     7     public interface MyListener {
     8         public void thank(String code);
     9 
    10     }
    11     
    12     // 1.当Fragment被添加到Activity时候会回调这个方法,并且只调用一次
    13     @Override
    14     public void onAttach(Activity activity) {
    15         // TODO Auto-generated method stub
    16         listener = (MyListener) activity;
    17         super.onAttach(activity);
    18     }
    19 //-------------------------------接收activity传值-开始--------------------
    20     @Override
    21     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    22             Bundle savedInstanceState) {
    23         // TODO Auto-generated method stub
    24         View view = inflater.inflate(R.layout.fragment, container, false);
    25         TextView textView = (TextView) view.findViewById(R.id.text);
    26   //获取Bundle()传过来的数据包
    27         String text = getArguments().get("name") + "";
    28         textView.setText(text);
    29         Toast.makeText(getActivity(), "已成功接收" + text, 1).show();
    30         
    31 //---------------------------------接收结束-------------------    
    32         
    33         Toast.makeText(getActivity(), "向ACtivity发送" + code, 1).show();
    34 
    35         listener.thank(code);
    36 
    37         return view;
    38     }
    39 }

    Fragment与Activity通信 (1)Fragment可以调用getActivity()方法获取它所在的Activity; (2)Activity可以调用FragmentManager的findFragmentById()或者findFragmentByTag()方法获取Fragment。 Activity --> Fragment:在Activity中创建Bundle数据包,并调用Fragment的setArguments(Bundle bundle)方法,然后在Fragment中使用getArguments()获取Bundle数据包。 Fragment --> Activity:需要在Fragment中定义一个内部回调接口,再让包含该Fragment的Activity实现该回调接口。这样Fragment可调用该回调方法将数据传递给Activity。
    将数据(这里是字符串 code) 从Fragment 传给 Activity:
    1.定义一个接口 MyListener,里面定义一个无方法体的方法thank( String str);
    2.创建 MyListener对象 listener;
    3.重写方法 onAttach(Activity activity);将activity强制转换为MyListener并赋值给 listener;
    4.在方法 onCreateView中写上 listener.thank(code); 实际上就是把数据 code 传递给了 activity!

















  • 相关阅读:
    Siege 3.0 正式版发布,压力测试工具
    Pomm 1.1.2 发布,专为 PG 设计的 ORM 框架
    Whonix 0.5.6 发布,匿名通用操作系统
    国内开源 java cms,Jspxcms 2.0 发布
    EZNamespaceExtensions.Net v2013增加对上下文菜单、缩略图、图标、属性表的支持
    GNU Guile 2.0.9 发布,Scheme 实现
    jdao 1.0.4 发布 轻量级的orm工具包
    OpenSearchServer 1.4 RC4 发布
    Percona Server for MySQL 5.5.3030.2
    Samba 4.0.5 发布
  • 原文地址:https://www.cnblogs.com/my334420/p/6719939.html
Copyright © 2011-2022 走看看