iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 29
4
Software Development

[Andriod] Andriod Studio 從入門到進入狀況系列 第 29

[Day 28] 我的第一個Android程式 - BMI程式設計(十七) 從其他頁面帶資料回來

延續上面的例子,只需加上及修改一些內容即可

strings.xml加入

<string name="advice_history">上次測試結果:</string>
<string name="input_empty"></string>

MainActivity.java修改及加入

加入變數

private static final int ACTIVITY_REPORT = 1000;

onClcik(view v)修改

//startActivity(intent);
startActivityForResult(intent, ACTIVITY_REPORT);

新增onActivityResult事件

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{
    super.onActivityResult(requestCode, resultCode, intent);
    if(resultCode == RESULT_OK)
    {
        if(requestCode == ACTIVITY_REPORT)
        {
            Bundle bundle = intent.getExtras();
            String bmi = bundle.getString("BMI");
            show_suggest.setText(getString(R.string.advice_history) + bmi);
            num_weight.setText(R.string.input_empty);
            num_weight.requestFocus();
        }
    }
}

ReportActivity.java修改

宣告變數

private double BMI;

showResults修改

BMI = weight / (height*height);

backtoMain修改

private Button.OnClickListener backtoMain = new Button.OnClickListener()
{
    public void onClick(View v)
    {
        DecimalFormat nf = new DecimalFormat("0.00");

        Bundle bundle = new Bundle();
        bundle.putString("BMI", nf.format(BMI));
        Intent intent = new Intent();
        intent.putExtras(bundle);
        setResult(RESULT_OK, intent);
        ReportActivity.this.finish();
    }
};

前面的畫面跟之前一樣,以下是返回後的畫面
https://ithelp.ithome.com.tw/upload/images/20181103/20105694agjHcmDYdV.png

以下是完整程式碼

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/TextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="@string/bmi_hello" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bmi_height" />

        <EditText
            android:id="@+id/height"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="numberDecimal" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bmi_weight" />

        <EditText
            android:id="@+id/weight"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="numberDecimal" />

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/bmi_btn" />

        <TextView
            android:id="@+id/result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceLarge"/>

        <TextView
            android:id="@+id/suggest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceLarge"/>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

MainActivity.java

package com.example.user.mybmi;

import android.content.Intent;
import android.os.LocaleList;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.text.DecimalFormat;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    private static final int ACTIVITY_REPORT = 1000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.w("Main", "開始事件");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //取得控制項物件
        initViews();
        //設定監聽事件
        setListensers();
    }

    private Button button_calc;
    private EditText num_height;
    private EditText num_weight;
    private TextView show_result;
    private TextView show_suggest;

    //取得控制項物件
    private void initViews()
    {
        button_calc = (Button)findViewById(R.id.button);
        num_height = (EditText)findViewById(R.id.height);
        num_weight = (EditText)findViewById(R.id.weight);
        show_result = (TextView)findViewById(R.id.result);
        show_suggest = (TextView)findViewById(R.id.suggest);
    }

    //設定監聽事件
    private void setListensers()
    {
        button_calc.setOnClickListener(calcBMI);
    }

    private OnClickListener calcBMI = new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setClass(MainActivity.this, ReportActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("KEY_HEIGHT", num_height.getText().toString());
            bundle.putString("KEY_WEIGHT", num_weight.getText().toString());
            intent.putExtras(bundle);
            startActivityForResult(intent, ACTIVITY_REPORT);

        }
    };

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        super.onActivityResult(requestCode, resultCode, intent);
        if(resultCode == RESULT_OK)
        {
            if(requestCode == ACTIVITY_REPORT)
            {
                Bundle bundle = intent.getExtras();
                String bmi = bundle.getString("BMI");
                show_suggest.setText(getString(R.string.advice_history) + bmi);
                num_weight.setText(R.string.input_empty);
                num_weight.requestFocus();
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        switch(id)
        {
            case R.id.action_settings:
                openOptionsDialog();
                break;
        }

        return super.onOptionsItemSelected(item);
    }

    private void openOptionsDialog()
    {
        Toast popup = Toast.makeText(this, "BMI計算機", Toast.LENGTH_SHORT);
        popup.show();
    }
}

strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">BMI</string>
    <string name="bmi_hello">哈囉!BMI</string>
    <string name="bmi_height">身高 (cm)</string>
    <string name="bmi_weight">體重 (kg)</string>
    <string name="bmi_btn">計算BMI值</string>
    <string name="bmi_result">你的BMI值是</string>
    <string name="advice_light">你該多吃點</string>
    <string name="advice_average">體型很棒喔!</string>
    <string name="advice_heavy">你該節食了</string>
    <string name="action_settings">設定</string>
    <string name="report_title">BMI報告</string>
    <string name="report_back">前一頁</string>
    <string name="advice_history">上次測試結果:</string>
    <string name="input_empty"></string>
</resources>

activity_report.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context=".ReportActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/report_title" />

        <TextView
            android:id="@+id/result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceLarge"/>

        <TextView
            android:id="@+id/suggest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:textAppearanceLarge"/>

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/report_back" />
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

ReportActivity.java

package com.example.user.mybmi;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.text.DecimalFormat;

public class ReportActivity extends AppCompatActivity {
    private double BMI;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_report);
        initViews();
        showResults();
        setListensers();
    }

    private Button button_back;
    private TextView show_result;
    private TextView show_suggest;

    private void initViews()
    {
        button_back = (Button)findViewById(R.id.button);
        show_result = (TextView)findViewById(R.id.result);
        show_suggest = (TextView)findViewById(R.id.suggest);
    }

    private void showResults()
    {
        try
        {
            DecimalFormat nf = new DecimalFormat("0.00");

            Bundle bundle = this.getIntent().getExtras();
            //身高
            double height = Double.parseDouble(bundle.getString("KEY_HEIGHT"))/100;
            //體重
            double weight = Double.parseDouble(bundle.getString("KEY_WEIGHT"));
            //計算出BMI值
            BMI = weight / (height*height);

            //結果
            show_result.setText(getText(R.string.bmi_result) + nf.format(BMI));

            //建議
            if(BMI > 25) //太重了
                show_suggest.setText(R.string.advice_heavy);
            else if(BMI < 20) //太輕了
                show_suggest.setText(R.string.advice_light);
            else //剛剛好
                show_suggest.setText(R.string.advice_average);
        }
        catch(Exception obj)
        {
            Toast.makeText(this, "要先輸入身高體重喔!", Toast.LENGTH_SHORT).show();
        }
    }

    private void setListensers()
    {
        button_back.setOnClickListener(backtoMain);
    }

    private Button.OnClickListener backtoMain = new Button.OnClickListener()
    {
        public void onClick(View v)
        {
            DecimalFormat nf = new DecimalFormat("0.00");

            Bundle bundle = new Bundle();
            bundle.putString("BMI", nf.format(BMI));
            Intent intent = new Intent();
            intent.putExtras(bundle);
            setResult(RESULT_OK, intent);
            ReportActivity.this.finish();
        }
    };
}

上一篇
[Day 27] Android程式設計番外篇 - 活動的生命週期(二)
下一篇
[Day 29] 我的第一個Android程式 - BMI程式設計(十八) 從其他頁面帶資料回來(二)
系列文
[Andriod] Andriod Studio 從入門到進入狀況33

1 則留言

0
rapid290413
iT邦新手 5 級 ‧ 2019-02-18 20:21:25

大大,想請問一下,我這個部份沒有對應到該怎麼處理。
上次問題我自己後來摸索後解決了,目前卡在這邊就完成了
麻煩您了,感謝https://ithelp.ithome.com.tw/upload/images/20190218/20112953pBwvND6Ymj.jpg

小魚 iT邦高手 1 級‧ 2019-02-19 07:54:45 檢舉

你的圖看不清楚,
不過strings.xml會出現紅色,
應該是你的名稱重複的吧,
名稱不能夠重複,
而且應該只能英文開頭,
內容必須是英文數字底線等,
某些特殊字元應該不行。

謝謝大大,我後來研究完也處理好嚕:)
目前已經完成了 感激

我要留言

立即登入留言