Android装备选择案例,演示Activity回传数据

本案例现了购买装备增加生命值的功能

运行效果:点击“小宝宝购买装备”按钮,会跳转到装备展示页面,购买成功后,进度条的值就会增加。

Android装备选择案例,演示Activity回传数据_第1张图片Android装备选择案例,演示Activity回传数据_第2张图片Android装备选择案例,演示Activity回传数据_第3张图片

1.创建程序

创建一个名为“装备选择”的项目,在activity_main.xml文件中设计用户交互页面,如左上图所示,代码如下:



    
    
    
        
            
            
            
        
        
            
            
            
        
        
            
            
            
        
    
    
        

上述布局代码中使用了控件ProgressBar(进度条),用来显示生命值,攻击力和敏捷度。ProgressBar通常

用于访问网络展示Loading对话框以及下载文件时显示进度。它有两种表现形式,一种是水平的(即本案例用

到的),另一种是环形的。它的表现形式由style属性控制的,ProgressBar几个常用属性如下所示:

  • style属性:控制ProgressBar的表现形式,水平进度条需设置style的属性值为

              "?android:attr/progressBarStyleHorizontal",环形进度条需设置style的属性值为

              "?android:attr/progressBarStyleLarge"。

  • setMax()方法:设置进度条的最大值。
  • setProgress()方法:设置当前进度。
  • getProgress()方法:获取当前进度。
2.创建装备界面
创建activity_shop.xml界面,用来展示装备,代码如下:


    
    
    
        
        
        
    

3.创建Info类
创建一个Info类,用于封装装备信息。代码如下:
public class Info implements Serializable{
    private String name;
    private int acctack;
    private int life;
    private int speed;
    public Info(String name,int acctack,int life,int speed){
        this.name=name;
        this.acctack=acctack;
        this.life=life;
        this.speed=speed;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAcctack() {
        return acctack;
    }

    public void setAcctack(int acctack) {
        this.acctack = acctack;
    }

    public int getLife() {
        return life;
    }

    public void setLife(int life) {
        this.life = life;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    @Override
    public String toString() {
        return "[name="+name+",acctack="+acctack+",life="+life+",speed="+speed+"]";
    }
}
4.创建ShopActivity
ShopActivity用来展示装备信息,当点击ShopActivity的装备时,会调回MainActivity并将装备信息回传给MainActivity。
具体代码如下:
public class ShopActivity extends AppCompatActivity implements View.OnClickListener {
    private Info info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局
        setContentView(R.layout.activity_shop);
        findViewById(R.id.activity_shop).setOnClickListener(this);
        //(1)初始化显示到界面的数据
        info=new Info("金剑",20,100,20);
        //(2)找到控件 显示数据
        TextView tv_name=(TextView)findViewById(R.id.tv_name);
        TextView tv_life=(TextView)findViewById(R.id.tv_life);
        TextView tv_attack=(TextView)findViewById(R.id.tv_attack);
        TextView tv_speed=(TextView)findViewById(R.id.tv_speed);
        //(3)初始化一下数据展示在控件上
        tv_name.setText(info.getName()+"");
        tv_life.setText("生命值:"+info.getLife());
        tv_attack.setText("攻击力:"+info.getAcctack());
        tv_speed.setText("敏捷度:"+info.getSpeed());
    }
    public void onClick(View v){
        //具体判断点击的是谁
        switch (v.getId()){
            case R.id.activity_shop://证明我们点击的就是这个布局
                //(1)获取当前的数据,把info数据返回
                Intent intent=new Intent();
                intent.putExtra("info",info);
                //把结果返回给调用者(mainActivity),通过onActivityResult方法返回
                setResult(10,intent);
                //(2)关闭当前这个页面,通过onActivityResult方法把数据返回
                finish();
                break;
            default:
                break;
        }
    }
}
5.编写界面交互代码(MainActivity)
MainActivity用于响应按钮的点击事件,并将返回的装备信息显示到指定的控件中,代码如下:
public class MainActivity extends AppCompatActivity {
    private ProgressBar pb1;
    private ProgressBar pb2;
    private ProgressBar pb3;
    private TextView tv_life_progress;
    private TextView tv_attack_progress;
    private TextView tv_speed_progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //(1)找到我们关心的控件
        pb1=(ProgressBar)findViewById(R.id.progressBar1);
        pb2=(ProgressBar)findViewById(R.id.progressBar2);
        pb3=(ProgressBar)findViewById(R.id.progressBar3);
        tv_life_progress=(TextView)findViewById(R.id.tv_life_progress);
        tv_attack_progress=(TextView)findViewById(R.id.tv_attack_progress);
        tv_speed_progress=(TextView)findViewById(R.id.tv_speed_progress);
        //(2)初始化一下进度条的最大值
        pb1.setMax(1000);
        pb2.setMax(1000);
        pb3.setMax(1000);
    }
    //(2)点击按钮跳转到另一个shop页面进行购买装备
    public void click(View v){
        Intent intent=new Intent(this,ShopActivity.class);
        //开启一个页面,并且要开启这个页面的返回数据
        startActivityForResult(intent,1);
    }

    //当我们开启的Activity关闭时调用这个方法
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(resultCode==10) {
            //(1)代表数据来源于shopActivity,取数据
            Info info = (Info) data.getExtras().get("info");
            //(2)更新一下ui
            updateProgressBar(info);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
    //更新当前控件的ui
    private void updateProgressBar(Info info){
        //(1)获取当前progrebar的进度
        int progress1=pb1.getProgress();
        int progress2=pb2.getProgress();
        int progress3=pb3.getProgress();
        //(2)更新一下progressbar的进度
        pb1.setProgress(progress1+info.getLife());
        pb2.setProgress(progress2+info.getAcctack());
        pb3.setProgress(progress3+info.getSpeed());
        //(3)更新一下textview的值
        tv_life_progress.setText(pb1.getProgress()+"");
        tv_attack_progress.setText(pb2.getProgress()+"");
        tv_speed_progress.setText(pb3.getProgress()+"");
    }
}
6.清单文件的配置
使用activity时需要在清单文件中配置,代码如下:
        
            
                

                
            
        
        






你可能感兴趣的:(Android装备选择案例,演示Activity回传数据)