Fragment,Spinner,viewPager,Bundle,返回(请求码,结果码)

本文详细介绍了Android开发中的Fragment使用,包括静态和动态加载,以及生命周期。还讲解了Spinner下拉列表框的设置,包括XML和代码中的实现方式。接着讨论了ViewPager的使用步骤和适配器的创建。最后,文章阐述了如何使用Bundle在Activities之间传递数据,并演示了启动另一个Activity并处理返回结果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FragMent(碎片)

一个fragment就是一个碎片,必须将碎片添加在activity上才能显示,注意,添加framentactivity必须要继承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_activityxml

<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(传递数据)

使用bundleactivities之间传递数据

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: 通过这个参数可以判断是从哪个界面回来的
  - resultCodedata:被关闭的那个界面传递回来的数据

当我们关闭新的Activity时,会触发主AcvitityonActivityResult方法,那么由于

之前主Activity发送了一个请求码,这时候就可以根据请求码判断是从哪个 界面回来的了。

 * setResult(int resultCode):设置传递到上一个界面的数据
 * setResult(int resultCode, Intent data):设置传递到上一个界面的数据

从新Activity回到主Activity时也可以设置一些结果码信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值