栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

4.Android学习之基本程序单元Activity(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4.Android学习之基本程序单元Activity(二)

目录

4.基本程序单元Activity(二)

3.多个Activity的使用

3-1.使用Bundle在Activity之间交换数据

3-2.调用另一个Activity并返回结果


4.基本程序单元Activity(二)

3.多个Activity的使用

3-1.使用Bundle在Activity之间交换数据

当在一个Activity中启动另一个Activity时,经常需要传递一些数据。 这时就可以通过Intent来实现,因为Intent通常被称为是两个Activity之间的信使,通过将要传递的数据保存在Intent中,就可以将其传递到另一个Activity中了。在Android中可以将要保存的数据存放在Bundle对象中,然后通过Intent提供的putExtras()方法将要携带的数据保存到Intent中。

注:Bundle 是一个key-value (键-值)对的组合,用于保存要携带的数据包。这些数据可以是boolean、byte、int、long、float、double 和String等基本类型或者对应的数组,也可以是对象或者对象数组。如果是对象或者对象数组时,必须实现Serializable或者Parcelable接口。

例:

 activity_main.xml



    
​
    
    
    
    
    
    
​
    

MainActivity.java

package com.example.activityexchangedata;
​
import androidx.appcompat.app.AppCompatActivity;
​
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
​
public class MainActivity extends AppCompatActivity {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button) findViewById(R.id.main_bt1);
        button.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View view) {
                //获取地区
                String site1=((EditText)findViewById(R.id.main_et1)).getText().toString();
                //获取街道
                String site2=((EditText)findViewById(R.id.main_et2)).getText().toString();
                //获取详细地址
                String site3=((EditText)findViewById(R.id.main_et3)).getText().toString();
                //获取姓名
                String name=((EditText)findViewById(R.id.main_et4)).getText().toString();
                //获取手机号
                String phone=((EditText)findViewById(R.id.main_et5)).getText().toString();
                //获取邮箱
                String email=((EditText)findViewById(R.id.main_et6)).getText().toString();
                if(!"".equals(site1)&&!"".equals(site2)&&!"".equals(site3)&&!"".equals(name)&&
                        !"".equals(phone)&&!"".equals(email)){
                    //将输入的信息保存到Bundle中,通过Intent传递到另一个Activity中显示出来
                    Intent intent=new Intent(MainActivity.this,AddressActivity.class);
                    //创建并实例化一个Bundle对象
                    Bundle bundle=new Bundle();
                    bundle.putCharSequence("name",name);//保存姓名
                    bundle.putCharSequence("phone",phone);//保存手机号
                    bundle.putCharSequence("site1",site1);//保存地区
                    bundle.putCharSequence("site2",site2);//保存街道
                    bundle.putCharSequence("site3",site3);//保存详细地址
                    //将Bundle对象添加到Intent对象中
                    intent.putExtras(bundle);
                    //启动Activity
                    startActivity(intent);
​
                }else {
                    Toast.makeText(MainActivity.this, "请将收货地址填写完整!", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

activity_address.xml



    
    
    
    

AddressActivity.java

package com.example.activityexchangedata;
​
import androidx.appcompat.app.AppCompatActivity;
​
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
​
public class AddressActivity extends AppCompatActivity {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_address);
        //获取Intent对象
        Intent intent=getIntent();
        //获取传递的Bundle信息
        Bundle bundle=intent.getExtras();
        //获取显示姓名的TextView组件
        TextView name=(TextView) findViewById(R.id.address_tv1);
        //获取输入的姓名并显示到TextView组件中
        name.setText(bundle.getString("name"));
        TextView phone=(TextView) findViewById(R.id.address_tv2);
        phone.setText(bundle.getString("phone"));
        TextView site=(TextView) findViewById(R.id.address_tv3);
        site.setText(bundle.getString("site1")+bundle.getString("site2")
                +bundle.getString("site3"));
​
    }
}

3-2.调用另一个Activity并返回结果

在Android应用开发时,有时需要在一个Activity中调用另一个Activity,当用户在第二个Activity中选择完成后,程序将自动返回到第一-个Activity中,第一个Activity 能够获取并显示用户在第二个Activity中选择的结果。例如,用户在修改信息时可以对头像进行修改,在修改头像时首先需要调用选择头像的界面,。在选择头像后会自动返回到修改信息界面,并显示用户选择的新头像。

此功能也可以通过Intent 和Bundle来实现。与在两个Acitvity 之间交换数据不同的是,此处需要使用startActivityForResult()方法来启动另一个Activity。调用startActivityForResult()方法启动Activity后,关闭新启动的Activity 时,可以将选择的结果返回到原Activity 中。startActivityForResult()方法的语法格式如下:

public void startActivityForResult (Intent intent, int requestCode)

该方法将以指定的请求码启动Activity,并且程序将会获取新启动的Activity 返回的结果(通过重写onActivityResult()方法来获取)。requestCode 参数代表了启动Activity的请求码,该请求码的值由开发者根据业务自行设置,用于标志请求来源。

例:

 activity_main.xml



    
    

MainActivity.java

package com.example.selectavatar;
​
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
​
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
​
public class MainActivity extends AppCompatActivity {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //隐藏标题栏
        ActionBar actionBar=getSupportActionBar();
        actionBar.hide();
​
        Button button=(Button) findViewById(R.id.main_btn1);
        button.setonClickListener(new View.onClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,HeadActivity.class);
                startActivityForResult(intent,0x11);
            }
        });
    }
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
        super.onActivityResult(requestCode,resultCode,data);
        //判断是否为待处理的结果
        if(requestCode==0x11&&resultCode==0x11){
            //获取传递的数据包
            Bundle bundle=data.getExtras();
            //获取选择的头像ID
            int imageId=bundle.getInt("imageId");
            //获取布局文件中添加的ImageView组件
            ImageView imageView=(ImageView) findViewById(R.id.main_iv1);
            //显示选择的头像
            imageView.setImageResource(imageId);
        }
    }
}

activity_head.xml



    

HeadActivity.java

package com.example.selectavatar;
​
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
​
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.baseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
​
public class HeadActivity extends AppCompatActivity {
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_head);
        //隐藏标题栏
        ActionBar actionBar=getSupportActionBar();
        actionBar.hide();
        //定义并初始化保存头像ID的数组
        int[] imageId=new int[]{R.drawable.touxiang1,R.drawable.touxiang2,
        R.drawable.touxiang3,R.drawable.touxiang4,R.drawable.touxiang5};
        GridView gridView=(GridView) findViewById(R.id.head_gv1);
​
        //适配器
        baseAdapter adapter=new baseAdapter() {
            
            @Override
            public int getCount() {
                return imageId.length;
            }
​
            
            @Override
            public Object getItem(int position) {
                return position;
            }
​
            
            @Override
            public long getItemId(int position) {
                return position;
            }
​
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                //声明ImageView的对象
                ImageView imageView;
                if(convertView==null){
                    //实例化ImageView的对象
                    imageView=new ImageView(HeadActivity.this);
                    
                    imageView.setAdjustViewBounds(true);
                    imageView.setMaxWidth(158);
                    imageView.setMaxHeight(150);
                    
                    //设置ImageView的内边距
                    imageView.setPadding(5,5,5,5);
                }else {
                    imageView=(ImageView) convertView;
                }
                //为ImageView设置要显示的图片
                imageView.setImageResource(imageId[position]);
                return imageView;
            }
        };
        //将适配器与GridView关联
        gridView.setAdapter(adapter);
        gridView.setonItemClickListener(new AdapterView.onItemClickListener() {
            @Override
            public void onItemClick(AdapterView adapterView, View view, int position, long l) {
                //获取Intent对象
                Intent intent=getIntent();
                //实例化要传递的数据包
                Bundle bundle=new Bundle();
                //显示选中的图片
                bundle.putInt("imageId",imageId[position]);
                //将数据包保存到Intent中
                intent.putExtras(bundle);
                //设置返回的结果码,并返回调用该Activity的Activity
                setResult(0x11,intent);
                //关闭当前Activity
                finish();
            }
        });
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号