-
[CustomListView] 안드로이드 커스텀 리스트뷰 아이템 클릭Android/개발 2017. 2. 18. 21:06
안드로이드 간단하게 Custom ListView 만들기
ListView에서는 ItemClickListener를 사용하여 쉽게 Click Event를 구현할 수 있습니다.
ItemClickListener를 이용하여 Item의 이미지를 확대해서 보여주는 DetailActivity로 이동하는 예제를 만들어봤습니다!
MainActivity의 ListView에서 Item을 클릭할 때 Intent를 이용하여 DetailActivity로 값을 넘겨주는 방식입니다.
기본 프로젝트는 [CustomListView] 안드로이드 커스텀 리스트뷰에서 확인하실 수 있습니다.
1. activity_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>- DetailActivity에서 크게 보여줄 이미지가 들어갈 ImageView를 만들어 줍니다.
2. listView.setOnItemClickListener() - MainActivity.java
// listView의 ItemClickListener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
/**
* ListView의 Item을 Click 할 때 수행할 동작
* @param parent 클릭이 발생한 AdapterView.
* @param view 클릭 한 AdapterView 내의 View(Adapter에 의해 제공되는 View).
* @param position 클릭 한 Item의 position
* @param id 클릭 된 Item의 Id
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// adapter.getItem(position)의 return 값은 Object 형
// 실제 Item의 자료형은 CustomDTO 형이기 때문에
// 형변환을 시켜야 getResId() 메소드를 호출할 수 있습니다.
int imgRes = ((CustomDTO)adapter.getItem(position)).getResId();
// new Intent(현재 Activity의 Context, 시작할 Activity 클래스)
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
// putExtra(key, value)
intent.putExtra("imgRes", imgRes);
startActivity(intent);
}
});- MainActivity에서 DetailActivity의 imageView에 담길 imgRes를 넘겨줍니다.
3. DetailActivity.java
package com.imaec.customlistviewdemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
public class DetailActivity extends AppCompatActivity {
private Intent intent;
private ImageView imageView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
// MainActivity에서 보낸 imgRes를 받기위해 getIntent()로 초기화
intent = getIntent();
imageView = (ImageView) findViewById(R.id.imageView);
// "imgRes" key로 받은 값은 int 형이기 때문에 getIntExtra(key, defaultValue);
// 받는 값이 String 형이면 getStringExtra(key);
imageView.setImageResource(intent.getIntExtra("imgRes", 0));
}
}- MainActivity에서 보낸 imgRes를 받아서 imageView에 보여줍니다.
4. 여기까지 작성하고 프로젝트를 시작하면
android.content.ActivityNotFoundException:
Unable to find explicit activity class {com.imaec.customlistviewdemo/com.imaec.customlistviewdemo.DetailActivity};
have you declared this activity in your AndroidManifest.xml?
이러한 에러 메시지를 받을 것입니다.
안드로이드에서 새로운 Activity를 생성하고 사용하기 위해서는 AndroidManifest.xml 파일에 Activity를 추가시켜줘야 합니다!
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Activity 추가 -->
<activity android:name=".DetailActivity"/>
</application>- AndroidManifest.xml에 Activity까지 추가시킨 후 프로젝트를 실행시키면 정상적으로 동작할 것입니다!
이상 리스트뷰에서 아이템클릭하여 새로운 액티비티 변환하는 소스였습니다!
알면 알수록 활용도가 높은 리스트뷰 마스터합시다!!
'Android > 개발' 카테고리의 다른 글
[BottomNavigationView] 안드로이드 BottomNavigationView 아이템 고정 (9) 2018.10.28 [BottomNavigationView] 안드로이드 BottomNavigationView 사용하기 (36) 2018.10.27 [뒤로가기 두번 눌러 종료] 안드로이드 뒤로가기 두번 눌러서 종료하기 (4) 2018.10.26 [CustomListView] 안드로이드 커스텀 리스트뷰 (2) 2017.02.07 [Jericho] jericho를 이용해 html 파싱 (0) 2017.01.28 댓글