安卓笔记3Activity

Activity

  • 四种状态
    • 运行状态
    • 暂停状态
    • 停止状态
    • 销毁状态
  • 生命周期

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("Activity生命周期","onCreate()方法调用");
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.i("Activity生命周期","onStart()方法调用");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.i("Activity生命周期","onResume()方法调用");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.i("Activity生命周期","onPause()方法调用");
    }
    @Override
    protected void onStop() {
        super.onStop();
        Log.i("Activity生命周期","onStop()方法调用");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i("Activity生命周期","onDestroy()方法调用");
    }

在这里插入图片描述
在这里插入图片描述

创建Activity

  • 创建步骤
    • 创建继承自Activity的Activity
    • 重写需要的回调方法,一般情况下需要重写onCreate方法
    • 设置要显示的视图,在onCreate方法中的setContentView中设置
      创建Activity的快捷方法

启动和关闭Activity

  • 入口Activity

    • 在AndroidMainifest.xml在这里插入图片描述
  • 其他Activity

    • 需要通过intent
    • 通过startActivity()`
Button button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,DetaiActivity.class);//创建Intent对象
                 startActivity(intent);//启动
            }
        });
  • 关闭Activity
    • 使用finish()方法,如果此Activity不是主活动,会返回调用它的界面当中,如果是会直接回到主屏幕中
  • 刷新当前中的Activity
    • 在Activity中调用onCreate(null);

数据传递

  • 在启动Activity的时候会用到Intet,那么就用Intet来传递数据,Intet可以称为两个Activity之间的信使
  • 但是Intent本身不具备保存数据的能力,所以需要通过另外一个功能实现,就是Bundle
  • Bundle就是键值对的组合,使用putxxx()方法将数据放到Bundle中,再用putExtras()方法取出来保存到Intent中
        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String site1=((EditText)findViewById(R.id.diqu)).getText().toString();//获取输入的地区
                String site2=((EditText)findViewById(R.id.jiedao)).getText().toString();//获取输入的街道
                String site3=((EditText)findViewById(R.id.xxdz)).getText().toString();//获取输入的详细地址
                String name=((EditText)findViewById(R.id.name)).getText().toString();//获取名字
                String phone=((EditText)findViewById(R.id.phone)).getText().toString();//获取输入的电话
                String email=((EditText)findViewById(R.id.youbian)).getText().toString();//获取输入的邮箱
                //判断是否有没有输入的
                if (!"".equals(site1) && !"".equals(site2) && !"".equals(site3) && !"".equals(name) && !"".equals(phone) && !"".equals(email) )
                {
                    Intent intent=new Intent(MainActivity.this,DetaiActivity.class);//创建Intent对象
                    Bundle bundle=new Bundle();//创建Bundel对象
                    bundle.putCharSequence("name",name);//保存数据
                    bundle.putCharSequence("phone",phone);
                    bundle.putCharSequence("site1",site1);
                    bundle.putCharSequence("site2",site2);
                    bundle.putCharSequence("site3",site3);
                    intent.putExtras(bundle);//将数据传到Intent中、
                    startActivity(intent);//启动Activity
                }else{
                    Toast.makeText(MainActivity.this, "请将收货地址填写完整", Toast.LENGTH_SHORT).show();
                }
            }
        });



在另一个Activity中
        //获取数据
        Intent intent=getIntent();//获取Intent对象
        Bundle bundle=intent.getExtras();//获取传递过来的Bundel
        String name=bundle.getString("name");//分别获取想要的信息
        String phone=bundle.getString("phone");
        String site=bundle.getString("site1")+bundle.getString("site2")+bundle.getString("site3");

        //获取用于显示的文本框
        TextView tv_name=(TextView)findViewById(R.id.tv_name);
        TextView tv_phone=(TextView)findViewById(R.id.tv_phone);
        TextView tv_site=(TextView)findViewById(R.id.tv_site);
        //设置获取到的文字
        tv_name.setText(name);
        tv_phone.setText(phone);
        tv_site.setText(site);

在这里插入图片描述
在这里插入图片描述
调用另一个Activitybig返回结果

  • 使用startActivityForResult()方法,
   Activity_Main中的代码,添加一个图片视图和按钮
 <ImageView
        android:id="@+id/imageView"
        android:layout_width="100dp"
        android:layout_gravity="center_horizontal"
        android:layout_height="100dp" />
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="选择" />

________________________________________________________
在另外一个Activity的代码,用于显示并且选择图片
<GridView
    android:id="@+id/gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp"
    android:horizontalSpacing="3dp"
    android:verticalSpacing="3dp"
    android:numColumns="4"/>

DetaiActivity中的代码

        //指定适配器
        GridView gridView = (GridView) findViewById(R.id.gridView);
        BaseAdapter adapter=new BaseAdapter() {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                ImageView imageView;
                if(convertView==null){
                    imageView=new ImageView(DetaiActivity.this);
                    imageView.setAdjustViewBounds(true);
                    imageView.setMaxWidth(158);
                    imageView.setMaxHeight(150);
                    imageView.setPadding(5,5,5,5);
                }else{
                    imageView=(ImageView)convertView;
                }
                imageView.setImageResource(imageID[position]);
                return imageView;
            }
            @Override
            public int getCount() {
                return imageID.length;
            }
            @Override
            public Object getItem(int position) {
                return position;
            }
            @Override
            public long getItemId(int position) {
                return position;
            }
        };

        gridView.setAdapter(adapter);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent=getIntent();
                Bundle bundle=new Bundle();
                bundle.putInt("imageid",imageID[position]);//将选中的图片ID传输出去
                intent.putExtras(bundle);
                setResult(0x11,intent);
                finish();
            }
        });

MainActivity中的代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button=(Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,DetaiActivity.class);
                startActivityForResult(intent,0x11);//传入参数,要启动的Activuty对象,请求码
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==0x11 && resultCode==0x11){
            Bundle bundle=data.getExtras();//获取BUndel
            int imageid=bundle.getInt("imageid");
            ImageView imageView=(ImageView)findViewById(R.id.imageView);
            imageView.setImageResource(imageid);
        }
    }

效果图展示在这里插入图片描述
在这里插入图片描述

使用Fragment

  • 用于在一个Activity中描述一些行为或者一部分用户界面,可以在多个Activity中重用一个Fragment
  • 生命周期,一个Fragment必须嵌入到一个Activity中生命周期
  • 通过extends Fragment创建
    在这里插入图片描述
    在这里插入图片描述
    在Activity中添加Fragment
  • 直接在布局文件中添加
       在两个不同的xml布局文件中建立
       在fragment_List中放入,在布局中不要设置android:layout_weight=""
       <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="List Fragment"
        android:textSize="20sp"/>
在 ragment_List中放入,布局中不要设置android:layout_weight=""    
       <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Detail Fragment"
        android:textSize="20sp"
        />

然后分别建立类并继承Fragment,实现onCreateView方法
例如

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_list,container,false);
        return view;
    }

然后再MainActivity中写

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:name="com.example.demo2.ListFragment"
        android:id="@+id/list"
        android:layout_weight="1"
        />
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:name="com.example.demo2.DetailFragment"
        android:id="@+id/detai"
        android:layout_weight="2"
        权重值
        />
  • 在Activity运行时添加Fragment
        getSupportFragmentManager()
                .beginTransaction()
                .add(R.id.fl,new DetailFragment())
                .commit();

在这里插入图片描述

  • 使用Fragment
    效果如图所示
    在这里插入图片描述
    需要创建好4个界面,如图所示。
    并设置好,创建好对应的类,并重写onCreateView方法
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView imageView1=(ImageView)findViewById(R.id.image1);
        ImageView imageView2=(ImageView)findViewById(R.id.image2);
        ImageView imageView3=(ImageView)findViewById(R.id.image3);
        ImageView imageView4=(ImageView)findViewById(R.id.image4);

        imageView1.setOnClickListener(l);
        imageView2.setOnClickListener(l);
        imageView3.setOnClickListener(l);
        imageView4.setOnClickListener(l);

    }

    View.OnClickListener l=new View.OnClickListener() {
        @Override
        public void onClick(View v) {//覆盖OnClickListener方法
            FragmentManager fm= getSupportFragmentManager();
            FragmentTransaction ft=fm.beginTransaction();
            Fragment f=null;
            switch (v.getId()){
                case R.id.image1:
                    f=new WeChat_fragment();
                    break;
                case R.id.image2:
                    f=new Message_Fragment();
                    break;
                case R.id.image3:
                    f=new Find_fragment();
                    break;
                case R.id.image4:
                    f=new me_Fragment();
                    break;
                default:;
                break;
            }
            ft.replace(R.id.fragment,f);
            ft.commit();
        }
    };
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
创建一个fragment,并默认显示WeChat_fragment

    <fragment
        android:id="@+id/fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:name="com.example.demo2.WeChat_fragment"
        />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        >
        <ImageView
            android:id="@+id/image1"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:src="@drawable/button1"
            />
        <ImageView
            android:id="@+id/image2"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:src="@drawable/button2"
            />
        <ImageView
            android:id="@+id/image3"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_weight="1"
            android:src="@drawable/button3"
            />
        <ImageView
        android:id="@+id/image4"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:src="@drawable/button4"
        />
    </LinearLayout>
</RelativeLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值