마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

tag값과 Intent를 통해서 텍스트뷰와 이미지뷰 전달하기

0 추천

현재 안드로이드 스튜디오를 통해서 개발공부를 진행중인 학생입니다.

step by step 안드로이드 프로그래밍 책을 보며 공부중인데 main_activity에서 두개의 레이아웃을 item1, item2으로 id를 설정해주고 tag값을 지정해서 picture_activity에다가 tag값을 Intent로 불러서 여기다가 디스플레이하는 걸 하려고 했는데 안됩니다..

정확히 말하자면 item1은 이미지도 잘 출력이 되고 텍스트도 잘 출력이 되는데 item2는 클릭했을 때 에뮬레이터 속 어플이 강제종료가 됩니다. 아시는 분들 있으시다면 가르쳐주시면 감사하겠습니다!!!

혼자서 오류를 해결해보려고 노력해봤지만 도저히 안되어서 왔습니다. 바로 코드를 보도록 하겠습니다.

 

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    public void displayPicture(View view) {
        int id = view.getId();
        LinearLayout layout = findViewById(id);
        String tag = (String) layout.getTag();
        Toast.makeText(this, "클릭한 아이템 : " + tag, Toast.LENGTH_SHORT).show();
        Intent it = new Intent(this, Picture.class);
        it.putExtra("it_tag", (String) tag);
        startActivity(it);
    }
}

 

Picture.java

import androidx.appcompat.app.AppCompatActivity;
public class Picture extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.picture);
        TextView tv_title = findViewById(R.id.title);
        TextView tv_author = findViewById(R.id.artist);
        ImageView iv_picture = findViewById(R.id.picture);
        Intent it = getIntent();
        String tag = it.getStringExtra("it_tag");
        Resources res = getResources();
        int id_title = res.getIdentifier("title" + tag, "string", getPackageName());
        String title = res.getString(id_title);
        tv_title.setText(title);
        int id_author = res.getIdentifier("artist" + tag, "string", getPackageName());
        String author = res.getString(id_author);
        tv_author.setText(author);
        int id_picture = res.getIdentifier("picture" + tag, "string", getPackageName());
        String picture = res.getString(id_picture);
        int id_img = res.getIdentifier(picture, "drawable", getPackageName());
        Drawable drawable = res.getDrawable(id_img);
        iv_picture.setBackground(drawable);
    }
    public void closePicture() {
        finish();
    }
}

 

logcat 오류

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
        at com.example.gallery.Picture.onCreate(Picture.java:41)

Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0
        at com.example.gallery.Picture.onCreate(Picture.java:42)

Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
        at com.example.gallery.MainActivity.displayPicture(MainActivity.java:22)

 

이미지뷰를 가져올 때 오류가 발생하는거 같은데 tag1의 텍스트뷰와 이미지뷰는 잘 가져와서 잘 보여주는데 tag2는 이미지뷰를 가져오는 과정에서 오류가 발생하는것 같습니다. 이미지뷰를 디스플레이하는 코드를 주석으로 바꾸고 실행해보면 텍스트뷰는 잘 가져오고 잘 보여줍니다.

kcoder (330 포인트) 님이 2021년 10월 17일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...