현재 안드로이드 스튜디오를 통해서 개발공부를 진행중인 학생입니다.
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는 이미지뷰를 가져오는 과정에서 오류가 발생하는것 같습니다. 이미지뷰를 디스플레이하는 코드를 주석으로 바꾸고 실행해보면 텍스트뷰는 잘 가져오고 잘 보여줍니다.