학교/Android

ShowPoem.java (poemApp01)

서윤-정 2024. 4. 17. 20:51

 

* 시를 표시하는 액티비티인 ShowPoem 클래스를 정의한다. 

시의 제목, 작가, 내용 및 이미지를 표시하고, 사용자가 뒤로 가기 버튼을 누르면 액티비티를 종료한다. 

 

 

package com.example.b_poemapp01;

import android.content.Intent;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class ShowPoem extends AppCompatActivity {

    LinearLayout layout;
    TextView title, author, body;
    ImageView img;

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

        layout = (LinearLayout) findViewById(R.id.poemlayout);
        title = (TextView) findViewById(R.id.title);
        author = (TextView) findViewById(R.id.author);
        body = (TextView) findViewById(R.id.body);
        img=(ImageView) findViewById(R.id.img);

        Resources res = getResources();

        Intent it = getIntent();
        String tag = it.getStringExtra("it_tag");

        int image_id =
                res.getIdentifier("image"+tag, "string", getPackageName());
        String image_str = res.getString(image_id);

        int id_drawable =
                res.getIdentifier(image_str, "drawable", getPackageName());
        Drawable drawable = getDrawable(id_drawable);
        img.setBackground(drawable);

        int title_id = res.getIdentifier("title" + tag, "string", getPackageName());
        String title_str = res.getString(title_id);
        title.setText(title_str);

        setTitle(title_str);

        int author_id = res.getIdentifier("author" + tag, "string", getPackageName());
        String author_str = res.getString(author_id);
        author.setText(author_str);

        int body_id = res.getIdentifier("body" + tag, "string", getPackageName());
        String body_str = res.getString(body_id);
        body.setText(body_str);
    }  // onCreaet



    public void goBack(View view){
        finish();
    }// goBack
}

 

 

 

 

1. LinearLayout, TextView, ImageView 변수 : 레이아웃의 각 요소를 참조하는데 사용된다.

 

2. onCreate(Bundle savedInstanceState) : 액티비티가 생성될 때 호출된다. 여기서 액티비티의 초기화 작업이 수행된다.

 

3. setContentView(R.layout.poem) : poem.xml 레이아웃 파일을 현재 액티비티에 적용한다.

이 레이아웃 파일은 시를 표시하는 액티비티의 UI를 정의한다. 

 

4. Intent it = getIntent() : 이 코드는 이전 액티비티에서 전달된 Intent를 가져온다.

여기서는 ShowPoem 액티비티를 시작하는데 사용된 Intent이다. 

 

5. String tag = it.getStringExtra("it_tag") : Intent에서 it_tag라는 이름의 extra 데이터를 가져온다.

이 extra는 이전 액티비티에서 선택된 시의 태그를 나타낸다.

 

6. 시에 관련된 정보를 가져와서 화면에 표시한다.

getResources() 을 사용하여 리소르를 가져오고, 

getIndentifier() 를 사용하여 리소스의 ID를 가져온다.

그런 다음 해당 ID를 사용하여 시의 제목, 작가, 내용 및 이미지를 설정한다.

 

7. res.getIdentifier("image"+tag, "string", getPackageName()) : 리소스의 ID 를 가져오는데 사용된다.

image와 tag를 조합하여 해당하는 이미지의 리소스 ID를 가져온다. 

tag는 이전 액티비티에서 선택된 시의 태그를 나타낸다.

 

8. res.getString(image_id) : 리소스의 문자열 값을 가져온다.

image_id 를 사용하여 해당하는 이미지의 리소 이름을 가져온다.

 

9. res.getIdentifier(image_str, "drawable", getPackageName()) : 이미지 리소스의 ID를 가져온다.

여기서는 image_str 을 사용하여 해당하는 이미지의 리소스 ID를 가져온다.

 

10. getDrawable(id_drawable) : 리소스 ID에 해당하는 Drawable 객체를 가져온다.

 

11. img.setBackground(drawable) : img ImageView의 배경에 가져온 Drawable 을 설정한다. 

즉, 시와 관련된 이미지를 화면에 표시한다.

 

12. res.getIdentifier("title" + tag, "string", getPackageName()) : 시의 제목에 해당하는 문자열 리소스의 ID를 가져온다. 

tag를 이용하여 선택된 시의 태그에 해당한느 리소스를 가져온다.