반응형



Android Studio에서 작성을 하였습니다.


기본적으로 JAVA와 Android의 개념은 알고 있다는 가정 하에 작성을 합니다.


기본적으로 Custom Listview를 만들기 위해서는 XML파일의 Listview와 custom요소가 들어가 있는 XML파일이 필요합니다.

이것들을 adapter를 통하여서 연결을 시켜주도록 하겠습니다.



ArrayList도 커스텀으로 만들어줍니다.

들어갈 항목들은 custom요소에 들어갈 값들  ex) 국가명, 도시명, 국기그림 이라면 -> String , String, Bitmap 이런식으로 

을 만들어 줍니다.


 1. ArrayList 만들기

 아이콘과 글자가 ListView 목록에 들어갈꺼니까 ArrayList에 들어갈 Item을 만들도록 하자.

  1. class ListView_Item //별도의 클래스 생성
  2. {
  3.     int icon;
  4.     String name;
  5.  
  6.     ListView_Item(int icon, String name)
  7.     {
  8.         this.icon = icon;
  9.         this.name = name;
  10.     }
  11. } 
클래스 생성 후
  1. ArrayList<ListView_Item> mItem ; //ArrayList를 만들어주고
  2.  
  3. protected void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         setContentView(R.layout.activity_settings);
  6.  
  7.         mItem = new ArrayList<ListView_Item>()//객체화한다
  8.         ListView_Item mi; //이미지와 아이콘이 들어갈 mi라는 객체 생성
  9.         mi = new ListView_Item(R.drawable.YourImage,"YourListName");
  10.         mItem.add(mi)//만들어진 객체를 ArrayList에 추가
  11.  }

 


Adapter는 쉽게 생각해서 전자기기 어댑터를 생각하시면 됩니다. 연결장치입니다. 

ArrayList의 값들을 XML파일과 연결시켜주는 역할을 합니다.


 2. CustomAdapter 만들기

 

  1. class mListAdapter extends BaseAdapter
  2. {
  3.     Context mContext;
  4.     LayoutInflater inflater;
  5.     ArrayList<ListView_Item> ar_Src;
  6.     int layout;
  7.  
  8.     public mListAdapter(Context context, int layout_id, ArrayList<ListView_Item> aarSrc)
  9.     {
  10.         mContext = context;
  11.         layout = layout_id;
  12.         ar_Src = aarSrc;
  13.  
  14.         //ListView에서 사용한 View를 정의한 xml을 읽어오기 위해 생성
  15.         inflater = LayoutInflater.from(mContext);
  16.     }
  17.  
  18.     //어댑터가 관리할 데이터의 갯수
  19.     @Override
  20.     public int getCount() {
  21.         return ar_Src.size();
  22.     }
  23.  
  24.     //아이템의 포지션을 객채로 읽어옴 : 이름을 읽어옴
  25.     @Override
  26.     public Object getItem(int position) {
  27.         return ar_Src.get(position).name;
  28.     }
  29.     //아이템을 받아옴
  30.     @Override
  31.     public long getItemId(int position) {
  32.         return position;
  33.     }
  34.  
  35.     @Override
  36.     public View getView(int position, View convertView, ViewGroup parent) {
  37.         if (convertView == null)
  38.             convertView = inflater.inflate(layout,parent,false)
  39.         ImageView img = (ImageView) convertView.findViewById(R.id.widget_img);//xml파일을 만들어서 TextView와 ImageView를 만든다
  40.         img.setImageResource(ar_Src.get(position).icon);                      //각각의 id 는 widget_img , widget_text

  41.         TextView txt = (TextView) convertView.findViewById(R.id.widget_text);
  42.         txt.setText(ar_Src.get(position).name);
  43.         return convertView;
  44.     }
  45. }
이후 생성된 Adapter를 OnCreate 에 아래 코드를 추가시킨다.
  1.         mListAdapter mAdapter = new mListAdapter(this,R.layout.widget_item,mItem)
  2.         //어댑터 객체를 만들고 mItem으로 ArrayList의 값은 이미 들어가있다.
  3.         mListView = (ListView)findViewById(R.id.listView)//ListView를 객체화하고
  4.         mListView.setAdapter(mAdapter)//Adpater를 집어넣는다

 

 


 CustomXML 코드 (들어가는 항목은 그림과, 텍스트입니다)                      Name = widget_item.XML

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:orientation="vertical" android:layout_width="match_parent"
  4.     android:layout_height="match_parent">
  5.  
  6.     <LinearLayout
  7.         android:orientation="horizontal"
  8.         android:layout_width="fill_parent"
  9.         android:padding="15dp"
  10.         android:layout_height="fill_parent">
  11.  
  12.         <ImageView
  13.             android:layout_width="wrap_content"
  14.             android:layout_height="wrap_content"
  15.             android:layout_weight="0.2"
  16.             android:id="@+id/widget_img" />
  17.  
  18.         <TextView
  19.             android:layout_width="wrap_content"
  20.             android:layout_height="wrap_content"
  21.             android:textAppearance="?android:attr/textAppearanceLarge"
  22.             android:text="Large Text"
  23.             android:layout_weight="0.8"
  24.             android:id="@+id/widget_text"
  25.             android:layout_gravity="center_horizontal"
  26.             android:gravity="left" />
  27.     </LinearLayout>
  28. </LinearLayout>


반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기