뭐 고작 ListView에 index 넣는 걸로 엄청 오래 끌었는데... 무튼 이제 거의 다왔음요.

전편 필요한 분.
2012/03/07 - [Android Study] - Android Study ListView Indexer 5편 

Layout 파일 내용.
<?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="wrap_content"
    android:gravity="center_vertical"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="25dip"
        android:clickable="false"
        android:background="@*android:drawable/dark_header"
        android:gravity="center_vertical"
        android:focusable="false"
        android:visibility="gone">

        <TextView
            android:id="@+id/head"
            android:layout_width="56dip"
            android:layout_height="wrap_content"
            android:textStyle="bold"
            android:textColor="@*android:color/dim_foreground_dark"
            android:textSize="14sp"
            android:gravity="center"/>
    </LinearLayout>

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="?android:attr/listPreferredItemHeight"
        android:gravity="left|center_vertical"
        android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>
붉은 색 부분이 index 표현을 위해서 추가된 code임. Layout 설명은 생략 하도록 하겠음.
IconAdapter에 추가된 함수

private void bindSectionHeader(View itemView, int position) {
    final int section = getSectionForPosition(position);
    LinearLayout header = (LinearLayout) itemView.findViewById(R.id.header);
    TextView head = (TextView) itemView.findViewById(R.id.head);
    if (getPositionForSection(section) == position) {
        String title = (String)mIndexer.getSections()[section];
        head.setText(title);
        header.setVisibility(View.VISIBLE);
    } else {
        header.setVisibility(View.GONE);
    }
}

Index 표시하는 부분 임 그럼 이 함수를 어디서 호출 해주는 것이냐 하면.

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    mCursor.moveToPosition(position);
    if (convertView == null) {
        convertView = newView(mContext, mCursor, parent);
    }
    bindView(convertView, mContext, mCursor);
    bindSectionHeader(convertView, position);
    return convertView;
}

이렇게 CursorAdapter 에 기본 함수 getView에서 호출 하도록 만들면 땡!
그러면 Adapter는 어떻게 초기화 하냐 하면.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_content);

    mAdapter = new IconAdapter(this, null);
    mList = (ListView) findViewById(android.R.id.list);
    mList.setAdapter(mAdapter);
    mList.setOnItemClickListener(this);

    Cursor cursor = getContentResolver().query(PracticeColumns.CONTENT_URI, 
    new String[] {PracticeColumns.ID, PracticeColumns.DATA}, null,
    null, PracticeColumns.DATA + " ASC");
    mAdapter.changeCursor(cursor);
}

Adapter 에서 changeCursor를 호출하면 땡!

이런 DB를 출력하면

이렇게 출력됨.


보통 Code를 통째로 공개하지는 않지만... 흠흠 이번엔 특별히 내가 귀찮으므로... 첨부~

AndroidList.zip


'Android' 카테고리의 다른 글

Android Custom Widget 만들기 2편  (0) 2012.04.12
Android Custom Widget 만들기 1편  (1) 2012.04.12
Android Study ListView Indexer 5편  (0) 2012.03.07
Android Study ListView Indexer 4편  (0) 2012.03.07
Android Study ListView Indexer 3편  (0) 2012.03.07

+ Recent posts