FragMent(碎片)
一个fragment就是一个碎片,必须将碎片添加在activity上才能显示,注意,添加frament的activity必须要继承FragMentActivity
首先写一个fragment的布局文件,并且要写一个对应的java文件,这个java文件必须继承FragMent,然后将布局文件添加上,显示在fragment上,
最后才能向activity加载
加载方式有两种:
静态加载和动态加载
静态加载直接将继承FragMent的类通过fragment标签加载进Main_Activity.xml中
静态加载:
<fragment
android:name="com.qiuqiu.fragment.TitleFragment"
//----------------TitleFragment:类名
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
动态加载:在java文件中通过控件的监听,
在main_activity.xml文件中添加framelayout,用来显示fragment,留备用
bt01.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
myFragment fragment1=new myFragment();
FragmentManager fm = TitleFragMent.this.getActivity().getSupportFragmentManager();
FragmentTransaction ft=fm.beginTransaction();
ft.replace(R.id.framelayout01, fragment1);
ft.commit();
}
});
1.一个FragMent是一个java文件,继承FragMent,并且都有自己对应的布局文件
public class SecondFragment extends Fragment
2.添加布局文件:和Activity有区别
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.frag_first, container,false);
return view;
}
3.查找获取控件id方法
View v=inflater.inflate(R.layout.title_fragment, container);
bt01=(Button) v.findViewById(R.id.sure);
4.在main_activity.xml中添加fragment
<!-- 静态加载fragment:android:name=:加载的fragment的名字,填写完整的报名和类名 -->
<fragment
android:id="@+id/title_fragment"
android:name="com.qiuqiu.fragment.TitleFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</FrameLayout>
将此布局添加到MainActivity.java中,此时的MainActivity.java 继承自FragmentActivity
setContentView(R.layout.activity_main);
FragMent有自己的生命周期,
onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
onActivityCreated(Bundle savedInstanceState)
onAttach(Activity activity)
onCreate(Bundle savedInstanceState)
onPause()
onResume()
onStart()
onStop()
onDetach()
onDestroy()
onDestroyView()
Spinner(下拉列表框)
android :entries为可选属性,用于指定列表项,如果在布局文件中不指定该属性,可以在Java代码中通过为其指定适配器的方式指定;
android:prompt属性也是可选属性,用指定列表选择框的标题
添加列表项有三种方式;
首先在values下创建arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="spinner1">
<item>学生证</item>
<item>身份证</item>
<item>驾照</item>
<item>工作证</item>
<item>其他</item>
</string-array>
</resources>
1.一种是在xml布局文件中直接添加array.xml
<Spinner
android:id="@+id/spin01"
android:prompt="@string/num"
android:entries="@array/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
2.用适配器添加在代码中添加array.xml
ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(Sp.this,
R.array.spinner1, android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(adapter);
3.另外是在java文件中通过代码,创建item,然后添加,动态添加
final String ctype[]=new String[]{"aaaa","bbbb","cccc","dddd"};
ArrayAdapter<String> adapter =new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,ctype);
spinner2.setAdapter(adapter);
viewPager
/*
* viewpager 的用法
* 1.声明一个ArrayList,用来存放Viewpager加载的fragment
* 2.声明一个类,继承自FragmentAdapter父类
* 3.用声明的类初始化一个FragmentPagerAdapter对象adapter
* 4,调用ViewPager的setAdapter方法,绑定adapter
*
*/
写main_activity。xml
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>
2.一个FragMent是一个java文件,继承FragMent,并且都有自己对应的布局文件
写几个界面(布局文件),对应几个继承Fragment的java类
Viewpage01.xml——————————————————》View01.java
Viewpage02.xml——————————————————》View02.java
写一个适配器的类
ViewpageAdapter.java
public class Viewpageadapter extends FragmentPagerAdapter{
ArrayList<Fragment> list;
public Viewpageadapter(FragmentManager fm,ArrayList<Fragment> fragmentList) {
super(fm);
this.list=fragmentList;
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int i) {
// TODO Auto-generated method stub
return list.get(i);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
}
在mainActivity.java中创建集合,将页面元素放进集合
ArrayList<Fragment> fragmentList=new ArrayList<Fragment>();
View01 v01=new View01();
View02 v02=new View02();
fragmentList.add(v01);
fragmentList.add(v02);
Viewpageadapter adapter=new Viewpageadapter(getSupportFragmentManager(), fragmentList);
vp.setAdapter(adapter);
给按钮添加事件监听
b01.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vp.setCurrentItem(0);
}
});
b02.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vp.setCurrentItem(1);
}
});
Bundle(传递数据)
使用bundle在activities之间传递数据
MainActivity.java:
Intent intent=new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
Bundle bundle=new Bundle();
bundle.putCharSequence("name", n);
bundle.putCharSequence("password", p);
intent.putExtras(bundle);
startActivity(intent);
SecondActivity.java:
textview=(TextView) findViewById(R.id.textView2);
Intent i=getIntent();
Bundle bundle=i.getExtras();
//System.out.println(bundle.getString("name"));
textview.setText(bundle.getString("name")+" "+bundle.getString("password"));
调用另一个activity并返回
MainActivity.java:
final int CODE=0x717;
startActivityForResult(intent,CODE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==CODE&&resultCode==CODE){
password=(EditText) findViewById(R.id.password);
sure=(EditText) findViewById(R.id.sure);
password.setText("");
sure.setText("");
}
SecondAct
ivity.java:
Button back;
back=(Button) findViewById(R.id.back);
final Intent i=getIntent();
Bundle bundle=i.getExtras();
//System.out.println(bundle.getString("name"));
textview.setText(bundle.getString("name")+" "+bundle.getString("password"));
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setResult(0x717,i);
finish();
}
});
在Android中,当Activity之间相互跳转时,可以使用意图(Intent)来传递相应的数据。
新的Activity与主Activity不在同一个线程中,当新的Activity关闭时,会触发主Activity的
onActivityResult事件。
startActivityForResult(Intent intent, int requestCode): 主Activity带着请求码跳到
一个新的Activity界面。
onActivityResult(int requestCode, int resultCode, Intent data)
- requestCode: 通过这个参数可以判断是从哪个界面回来的
- resultCode、data:被关闭的那个界面传递回来的数据
当我们关闭新的Activity时,会触发主Acvitity的onActivityResult方法,那么由于
之前主Activity发送了一个请求码,这时候就可以根据请求码判断是从哪个 界面回来的了。
* setResult(int resultCode):设置传递到上一个界面的数据
* setResult(int resultCode, Intent data):设置传递到上一个界面的数据
从新Activity回到主Activity时也可以设置一些结果码信息。