안드로이드 Activity Intent - 전화번호부 앱

YAMAMAMO·2021년 11월 22일
0

네이버 사전

1.[형용사] 강한 관심[흥미]을 보이는, 몰두[열중]하는

2.[형용사][격식](특히 남에게 해가 될 일을) 꾀하는[작정한]

3.[명사][격식 또는 법률]의도 (=intention )

4.[명사][U] 의지, 의향(intention); 목적, 계획

5.[명사]의미, 취지

Intent?

  • Intent는 일종의 메시지 객체로 안드로이드 컴포넌트들 사이의 통신을 담당한다. 작업을 요청하거나 데이터를 주고 받을 수 있다.
  • Intent 는 명시적 Intent와 암시적 Intent 로 나눌 수 있다.
  • 명시적 Intent - 실행하고자 하는 컴포넌트의 클래스명을 Intent에 담는 방식입니다. 주로 같은 앱의 컴포넌트를 실행할 때 사용합니다.
  • 암시적 Intent - 클래스 명이 아닌 Intent Filter 정보를 활용합니다. 주로 다른 앱의 컨포넌트를 실행할 때 사용합니다.

명시적 Intent

-전화번호부 앱에서 리사이클러뷰의 아이템을 터치 했을 때 디테일 액티비티로 전환하고 데이터 전달하는 것 까지 작업을 하겠습니다.

-전달할 데이터는 이름과 전화번호 입니다.

activity_detail.xml

-ImageView 는 프로필사진을 넣을 수 있게 만들 예정이서 미리 추가했습니다.

-ImageVIew 에 src에 이미지 경로를 입력하면 그 이미지를 ImageView 에 띄울 수 있습니다.

-drawable 폴더에서 우클릭 → new → Vecter Asset. 안드로이드에서 기본 제공하는 Vecter 이미지를 생성할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".DetailActivity">

    <ImageView
        android:id="@+id/iv_profile"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_baseline_person_24"
        android:layout_marginTop="80dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="이름"
        android:textColor="@color/black"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/iv_profile" />

    <TextView
        android:id="@+id/tv_number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="000-0000-0000"
        android:textColor="@color/black"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_name" />

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity

-리사이클러뷰 아이템 클릭 메서드에 코드를 추가했습니다.

-아이템 클릭시 Intent 에 이름, 전화번호 데이터를 담아 DetailActivity를 호출 합니다.

public class MainActivity extends AppCompatActivity {
	.....

    @Override
    protected void onCreate(Bundle savedInstanceState) {
  
			.......

        //리사이클러뷰 클릭 이벤트
        mAdapter.setOnItemClickListener (new Adapter.OnItemClickListener () {

            //아이템 클릭시 Intent에 데이터 담아 DetailActivity 호출
            @Override
            public void onItemClick(View v, int position) {
                String name = mArrayList.get (position).getName ();
                String number = mArrayList.get (position).getNumber ();
                //Toast.makeText (mContext, "이름 : " + name + "\n전화번호 : " + number, Toast.LENGTH_SHORT).show ();

                //인텐트 객체 생성.
                //Intent 에 putExtra 로  name, number 담는다.
                //startActivity 를 사용해 DetailActivity 를 호출한다.
                Intent intent = new Intent (mContext, DetailActivity.class);
                intent.putExtra ("name", name);
                intent.putExtra ("number", number);
                startActivity (intent);
            }
					...........

        });

    }

   ........

DetailActivity

public class DetailActivity extends AppCompatActivity {
    TextView tv_name, tv_number;

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

        //Intent 로 데이터를 받아옵니다.
        Intent intent = getIntent ();
        String name = intent.getStringExtra ("name");
        String number = intent.getStringExtra ("number");

        tv_name = findViewById (R.id.tv_name);
        tv_number = findViewById (R.id.tv_number);

        //받아온 데이터를 TextView 에 띄워줍니다.
        tv_name.setText (name);
        tv_number.setText (number);

    }
}

)

-Jamse 를 클릭했을 때.

마무리

-명시적 Intent 를 사용해서 데이터를 담아 액티비티를 호출했습니다. 암시적 Intent는 프로필 이미지를 가져오는 기능을 추가할 때 다시 포스팅하겠습니다.

-코드를 복사 붙여넣기 하면 Intent 에 빨간줄이 뜰것입니다. Import해주면 해결 됩니다.

-전체 코드는 이전 전화번호부 앱 시리즈를 보면 확인 하실 수 있습니다.

profile
안드로이드 개발자

0개의 댓글