Riucc's Storage
RSS
태그
관리
쓰기
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
Riucc's Storage

[안드로이드] - 커스텀 리스트뷰 만들기(커스텀뷰)

안드로이드|2017. 10. 25. 18:11
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

○ 커스텀 리스트뷰 만들기(커스텀뷰) 

 

 1. 리스트뷰를 사용할 액티비티에 리스트뷰 생성(activity_main.xml)

 2. 리스트뷰로 데이터를 어떻게 디자인하여 띄울 것인가에 따라 Layout 구성(list_item.xml)

 3. 새 클래스에 리스트뷰로 띄울 데이터들을 정의한다(ListViewItem.class)

 4. BaseAdapter 상속받아 새로운 어댑터 생성(MyAdapter.class)

 5. 리스트뷰를 어댑터에 붙이고 데이터 삽입하고 이벤트 처리를 한다(MainAcitivity.class)

 

 ※ xml 파싱 및 DB 데이터를 읽어와서 커스텀뷰로 띄우는 것도 가능하다

 

2. 리스트뷰로 데이터를 어떻게 디자인하여 띄울 것인가에 따라 Layout 구성(list_item.xml)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="150dp"
        android:layout_height="100dp" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:id="@+id/titleText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/contenttText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

 

3. 새 클래스에 리스트뷰로 띄울 데이터들을 정의한다(ListViewItem)

 

 

 public class ListViewItem {   // getter / setter 사용
    private Drawable partimage;
    private String titleStr;
    private String contentStr;

 

    public Drawable getPartimage() {
        return partimage; }

    public void setPartimage(Drawable partimage) {
        this.partimage = partimage; }

    public String getTitleStr() {
        return titleStr; }

    public void setTitleStr(String titleStr) {
        this.titleStr = titleStr; }

    public String getContentStr() {
        return contentStr; }

    public void setContentStr(String contentStr) {
        this.contentStr = contentStr; }
}

 

4. BaseAdapter 상속받아 새로운 어댑터 생성(MyAdapter.class)

 

public class MyAdapter extends BaseAdapter {
    ArrayList arrList = new ArrayList() ;
    public MyAdapter(){ }  // 생생자
   
    public View getView(int position, View convertView, ViewGroup parent){   // getView를 잘 활용하는 것이 중요
        Context context = parent.getContext();

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_item, parent, false);
        }
     
        ImageView partImage = (ImageView) convertView.findViewById(R.id.imageView) ;
        TextView titleText = (TextView) convertView.findViewById(R.id.titleText) ;
        TextView contenttText = (TextView) convertView.findViewById(R.id.contenttText) ;

 

        ListViewItem listViewItem = (ListViewItem) arrList.get(position);
       
        partImage.setImageDrawable(listViewItem.getPartimage());
        titleText.setText(listViewItem.getTitleStr());
        contenttText.setText(listViewItem.getContentStr());

 

        return convertView;
    }

 

    public long getItemId(int position) {
        return position ; }

    public Object getItem(int position) {
        return arrList.get(position) ; }
    public int getCount() {
        return arrList.size() ; }

 

    // 아이템 데이터 추가를 위한 함수
    public void addItem(Drawable partImage, String titleText, String contenttText) {
        ListViewItem item = new ListViewItem();
        item.setPartimage(partImage);
        item.setTitleStr(titleText);
        item.setContentStr(contenttText);
        arrList.add(item);
    }
}

 

5. 리스트뷰를 어댑터에 붙이고 데이터 삽입(MainAcitivity.class)

 

public class MainActivity extends AppCompatActivity {
    ListView listView;
    MyAdapter adapter;

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

 

        listView = (ListView)findViewById(R.id.listView);
        adapter = new MyAdapter();
        listView.setAdapter(adapter);

 

        adapter.addItem(getResources().getDrawable(R.drawable.cat),
                "고양이", "고양이는 귀여워") ;
        adapter.addItem(getResources().getDrawable(R.drawable.croker),
                "악어", "악어는 사나워") ;
        adapter.addItem(getResources().getDrawable(R.drawable.dog),
                "강아지", "광견병 조심") ;
        adapter.addItem(getResources().getDrawable(R.drawable.ele),
                "코끼리", "너무 커") ;
        adapter.addItem(getResources().getDrawable(R.drawable.monkey),
                "원숭이", "바나나 조아해") ;
        adapter.addItem(getResources().getDrawable(R.drawable.rabbit),
                "토끼", "귀가 이뻐");
        adapter.addItem(getResources().getDrawable(R.drawable.rion),
                "사자", "맹수지");

 

        // 리스트뷰 이벤트 처리

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ListViewItem item = (ListViewItem)parent.getItemAtPosition(position);

                Drawable partImage = item.getPartimage();
                String titleStr = item.getTitleStr();
                String contentStr = item.getContentStr();

                Toast.makeText(MainActivity.this, titleStr + " : " + contentStr, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

 

'안드로이드' 카테고리의 다른 글

[안드로이드] - 뷰 캡처하여 이미지 파일로 저장하기(화면 캡처)  (0) 2017.11.07
[안드로이드] - 메인 이전 프로그래스바 액티비티 생성  (0) 2017.11.07
[안드로이드] - SeekBar와 MediaPlayer로 음악재생(쓰레드 이용)  (1) 2017.10.25
[안드로이드] - 이미지버튼이나 이미지에 메뉴 넣기  (0) 2017.10.20
[안드로이드] - 액티비티 완전히 종료하기  (0) 2017.10.18

댓글()
카테고리
  • IT (593)
    • 정리 (0)
    • C# (42)
    • ASP.NET MVC (16)
    • JQuery&Javascript (12)
    • CSS (11)
    • 데이터베이스 (32)
    • Windows Server (6)
    • Active Directory (3)
    • Exchange (9)
    • JAVA (2)
    • JSP (39)
    • JSP 게시판 만들기 (21)
    • JSP 개발 참고 (15)
    • JSP 안드로이드 (4)
    • Servlet (17)
    • Spring (42)
    • HTML (14)
    • NodeJS (46)
    • MongoDB (11)
    • 리눅스 (18)
    • 자료구조 (16)
    • 아이폰 (24)
    • 안드로이드 (68)
    • API 활용하기 (10)
    • 소켓네트워크 (28)
    • 라즈베리파이 (11)
    • AWS클라우드 (10)
    • 빅데이터Hadoop (22)
    • 커널모듈프로그래밍 (8)
    • 기타 (10)
    • 자격증 (26)
최근 등록 현황
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
최근 글
최근 월별 글
최근 댓글
달력
지난달
2025.5
다음달
일월화수목금토
123
45678910
11121314151617
18192021222324
25262728293031
태그 구름
  • 리눅스
  • 데이터베이스
  • 정보처리산업기사 15년 필기
  • HTML
  • 안드로이드 카카오 로그인
  • 카카오 로그인 연동
  • 정규화
  • 정보처리산업기사 필기
  • jsp
  • 카카오 로그인
  • 안드로이드 intent
  • 커널 모듈 프로그래밍
  • 정보처리산업기사 16년 필기
  • 이클립스 디비 연동
  • 안드로이드 카카오 로그인 연동
  • 자료구조
  • 정보처리산업기사 15년
  • 정보처리산업기사 정리
  • 소켓
  • 정보처리산업기사 요약
  • 정보처리기사 실기 정리
  • nodejs MySQL 연동하기(Connection Pool)
  • 소켓 프로그래밍
  • 정보처리산업기사 필기 정리
  • nodejs express
  • 이클립스 mysql 연동
  • 안드로이드
  • 정보처리산업기사 총정리
  • 정규형
  • 정보처리산업기사 16년
카운터
전체 방문자
오늘
어제
Skin by M1REACT. Designed by M1STORY.TISTORY.COM. Valid XHTML 1.0 and CSS 3. Copyright ⓒ Riucc's Storage. All rights reserved.

티스토리툴바