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!

















  • 相关阅读:
    修改代码一般在测试服务器
    人很臭尽量往香里去做...
    救赎
    写的css十个错误
    如何debug看源代码
    办公室倒水
    程序和思维
    mousewheel.js 和scroll api
    drupal.behavior 和 document.ready 没有直接的关系
    revision in drupal
  • 原文地址:https://www.cnblogs.com/my334420/p/6719939.html
Copyright © 2011-2022 走看看