본문 바로가기

Programming/국비학원

220525 - 안드로이드 구현 실습 (멀티 액티비티, 성적 입력 계산, 투표)

220525
  • 멀티 액티비티

자바파일 상위패키지 - new empty activity

=> 메인 - 결과 화면 연결

 

 

  • xml : main

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnNewActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="결과 액티비티 호출"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="메인 화면"/>

</LinearLayout>

 

 

  • xml : 2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".Activity">

    <Button
        android:id="@+id/btnReturn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인으로 돌아가기"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30dp"
        android:text="결과 액티비티"/>

</LinearLayout>

 

 

  • java : main

package com.example.multiactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button btnNewActivity;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnNewActivity = findViewById(R.id.btnNewActivity);
        //버튼 처리 작업
        btnNewActivity.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent mintent = new Intent(getApplicationContext(), Activity.class);
                startActivity(mintent);
            }
        });
    }
}

 

 

  • java : 2

package com.example.multiactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class Activity extends AppCompatActivity {
    Button btnReturn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        btnReturn = findViewById(R.id.btnReturn);
        btnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

 

 

 

  • 국어, 영어 점수 입력 -> 성적 계산
  • xml : 메인

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:gravity="center"
    android:padding="50dp"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:padding="30dp">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:text="국어"/>

        <EditText
            android:id="@+id/edtKor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="숫자 입력"
            android:inputType="number"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:padding="30dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:text="영어"/>

        <EditText
            android:id="@+id/edtEng"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:hint="숫자 입력"
            android:inputType="number" />
    </LinearLayout>

    <Button
        android:id="@+id/btnResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="결과 보기"/>

</LinearLayout>

 

 

  • xml : 2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:gravity="center"
    android:padding="50dp"
    tools:context=".Activity">

    <TextView
        android:id="@+id/tvScore"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:gravity="center"/>

    <Button
        android:layout_marginTop="50dp"
        android:id="@+id/btnReturn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="메인으로 돌아가기"/>

</LinearLayout>

 

 

  • java : 메인

package com.example.multiactivity;

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;

public class MainActivity extends AppCompatActivity {
    EditText edtKor, edtEng;
    Button btnResult;
    int kor, eng;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edtKor = findViewById(R.id.edtKor);
        edtEng = findViewById(R.id.edtEng);
        btnResult = findViewById(R.id.btnResult);

        btnResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                kor = Integer.parseInt(edtKor.getText().toString());
                eng = Integer.parseInt(edtEng.getText().toString());
                Intent intent = new Intent(getApplicationContext(), Activity.class);
                intent.putExtra("korScore",kor);
                intent.putExtra("engScore",eng);
                startActivity(intent);
            }
        });



    }
}

 

 

  • java : 2

package com.example.multiactivity;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Activity extends AppCompatActivity {
    Button btnReturn;
    TextView tvScore;
    int kor, eng, tot, avg;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        btnReturn = findViewById(R.id.btnReturn);
        tvScore = findViewById(R.id.tvScore);
        Intent gintent = getIntent();
        kor = gintent.getIntExtra("korScore",0);
        eng = gintent.getIntExtra("engScore",0);
        tot = kor+eng;
        avg = tot/2;
        tvScore.setText("** 성적 결과 **\n국어 : "+kor+"\n영어 :"+eng+"\n총점 : "+tot+"\n평균 : "+avg);
        //메인 돌아가기 버튼
        btnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });


    }
}

 

 

 

  • 명화 인기투표
  • xml : 메인

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">

        <ImageView
            android:id="@+id/img1"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:src="@drawable/dog" />
        <ImageView
            android:id="@+id/img2"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/cat"/>
        <ImageView
            android:id="@+id/img3"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/dog"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/img4"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/dog"/>
        <ImageView
            android:id="@+id/img5"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/cat"/>
        <ImageView
            android:id="@+id/img6"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/dog"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/img7"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/dog"/>
        <ImageView
            android:id="@+id/img8"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/cat"/>
        <ImageView
            android:id="@+id/img9"
            android:layout_width="wrap_content"
            android:layout_height="130dp"
            android:layout_weight="1"
            android:layout_margin="5dp"
            android:src="@drawable/dog"/>
    </LinearLayout>

    <Button
        android:id="@+id/btnVoteResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="투표 종료"/>

</LinearLayout>

 

 

  • xml : 2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:gravity="center"
    tools:context=".ResultActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="명화 이름1"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="명화 이름2"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="명화 이름3"
            android:layout_weight="1"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="명화 이름4"
            android:layout_weight="1"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName5"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="명화 이름5"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="명화 이름6"
            android:layout_weight="1"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="명화 이름7"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar7"
            style="?android:attr/ratingBarStyleIndicator"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="명화 이름8"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/tvName9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="명화 이름9"
            android:textSize="20dp"/>

        <RatingBar
            android:id="@+id/rBar9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5"
            style= "?android:attr/ratingBarStyleIndicator"
            />
    </LinearLayout>

    <Button
        android:id="@+id/btnReturn"
        android:layout_marginTop="50dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="메인으로 돌아가기"
        />



</LinearLayout>

 

 

  • java : 메인

package com.example.voteapp;

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;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    Button btnVoteResult;
    ImageView[] imgs = new ImageView[9];
    Integer[] imgsID = {R.id.img1, R.id.img2,R.id.img3,R.id.img4,R.id.img5,R.id.img6,R.id.img7,R.id.img8,R.id.img9};
    String[] imgName = {"a","b","c","d","e","f","g","h","i"};
    int[] voteCount = new int[9];  //각 명화 투표 수


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnVoteResult = findViewById(R.id.btnVoteResult);
        for (int i=0;i<imgs.length;i++){
            imgs[i]=findViewById(imgsID[i]);
        }


        //이미지 클릭
        for (int i=0;i<imgs.length;i++) {
            final int index= i;  //final 처리
            imgs[index].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    voteCount[index]++;
                    Toast.makeText(getApplicationContext(), imgName[index] + " : 총 " + voteCount[index] + "표",
                            Toast.LENGTH_SHORT).show();
                }
            });
        }
        //투표 종료 버튼
        btnVoteResult.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(),ResultActivity.class);
                //지금 코드 맥락에서 ResultActivity 클래스와 연결
                intent.putExtra("VoteCount",voteCount);
                intent.putExtra("ImgName",imgName);
                //전달할 변수: 대문자  //배열 전체 전달
                startActivity(intent);
            }
        });

    }//oncreate
}

 

 

  • java : 2

package com.example.voteapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RatingBar;
import android.widget.TextView;

public class ResultActivity extends AppCompatActivity {
    Button btnReturn;
    TextView tvName[] = new TextView[9];
    Integer tvNameID[] = {R.id.tvName1,R.id.tvName2,R.id.tvName3,R.id.tvName4,
            R.id.tvName5,R.id.tvName6,R.id.tvName7,R.id.tvName8,R.id.tvName9};
    RatingBar rBar[] = new RatingBar[9];
    Integer rBarID[] = {R.id.rBar1,R.id.rBar2,R.id.rBar3,R.id.rBar4,
            R.id.rBar5,R.id.rBar6,R.id.rBar7,R.id.rBar8,R.id.rBar9};
    int[] voteResult;  //투표 수 배열
    String[] imgNames; //명화 이름 배열


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        btnReturn = findViewById(R.id.btnReturn);
        for (int i=0;i<tvName.length;i++){
            tvName[i]=findViewById(tvNameID[i]);
        }
        for (int i=0;i<rBar.length;i++){
            rBar[i]=findViewById(rBarID[i]);
        }

        Intent gintent = getIntent();
        voteResult = gintent.getIntArrayExtra("VoteCount");
        imgNames = gintent.getStringArrayExtra("ImgName");
        for (int i=0;i<voteResult.length;i++){
            tvName[i].setText(imgNames[i]+" (총 "+voteResult[i]+"표)");
            rBar[i].setRating(voteResult[i]);
        }

        btnReturn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }
}

 

 

////이 날 질문했는데 다음날에 관련된 예제 보여주겠다고 하셨당

Q. 선생님 메인으로 돌아가기 버튼 눌렀을 때 투표했던 값들 초기화시키고 새로 투표하게 하고 싶은데, 그런 설정은 어떻게 할까요? btnReturn onClick 메소드에서 설정해도 안 돼서요
=> 액티비티 Life cycle (생명 주기) 개념과 관련됨