기본 콘텐츠로 건너뛰기

[android] RecyclerView with Cursor

RecyclerView is new in Android 5.0 (Lollipop).

To use with support library


add compile 'com.android.support:recyclerview-v7:21.0.0' in build.gradle file


dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.0'
    compile 'com.android.support:recyclerview-v7:21.0.0'
}

and import

import android.support.v7.widget.RecyclerView;

Get from layout xml


RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycle_list);


Plug in LayoutManager


recyclerView.setLayoutManager(layoutManager);


Create Adapter


NameRecyclerAdapter mAdapter;
...
mAdapter = new NameRecyclerAdapter();


Plug in Adapter


recyclerView.setAdapter(mAdapter);

NameRecyclerViewAdapter.java

import android.database.Cursor;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 *
 * Recycler Adapter for TestDB
 *
 */
public class NameRecyclerAdapter extends RecyclerView.Adapter {

    private Cursor mCursor;

    @Override
    public NameViewHolder onCreateViewHolder(ViewGroup parent, int position) {
        NameViewHolder vh = new NameViewHolder(new TextView(parent.getContext()));
        return vh;
    }

    @Override
    public void onBindViewHolder(NameViewHolder viewHolder, int position) {
        mCursor.moveToPosition(position);

        ((TextView)(viewHolder.itemView))
            .setText(mCursor.getString(mCursor.getColumnIndex(TestDb.NAME)));
    }

    @Override
    public int getItemCount() {
        if (mCursor != null)
            return mCursor.getCount();
        else return 0;
    }

    /**
     * set DataBase Cursor for Recycler Adapter
     * @param cur
     */
    public void setDataSet(Cursor cur) { mCursor = cur; }
}

set DataSet with Db Cursor asynchronously

    private class LoadTestDbTask extends AsyncTask {
        @Override
        protected TestDb doInBackground(Context... params) {
            return new TestDb(params[0]);
        }

        @Override
        protected void onPostExecute(TestDb testDb) {
            super.onPostExecute(testDb);

            mAdapter.setDataSet(testDb.getNames());
            mAdapter.notifyDataSetChanged();
        }
    }


This sample code is in GitHub.

댓글

이 블로그의 인기 게시물

Example of java class transform with java agent and BCI

Dynamic transform   예제 시나리오 원하는 작업  DB에 요청하는 모든 쿼리를 출력 작업 순서 Agent 작성 ClassFileTransformer 구현 Agent 작성 Java Agent 구성도 Manifest 파일 Manifest-Version: 1.0 Premain-Class: sample.bci.Agent Agent-Class: sample.bci.Agent Can-Redefine-Classes: True must be end with new line - http://docs.oracle.com/javase/tutorial/deployment/jar/modman.html Agent.java /** * example for bci with java agent */ package sample.bci; import java.lang.instrument.Instrumentation; /** * @author k * */ public class Agent { public static void premain(String args, Instrumentation inst) { inst.addTransformer(new JdbcQueryTransformer()); } public static void agentmain(String args, Instrumentation inst) { inst.addTransformer(new JdbcQueryTransformer()); } } JdbcQueryTransformer. java /** * example for bci with java agent */ package sample.bci; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.IllegalClassFormatException; impor...

tkinter한줄 입력받아 출력하기

from tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() #한줄 입력을 위한 위젯, Entry self.input = Entry(frame) self.input.pack(side=LEFT) self.button = Button(frame, text="입력", command=self.output) self.button.pack(side=LEFT) def output(self): #입력받은 내용을 출력 #Entry.get() print(self.input.get()) def main(): root = Tk() app = App(root) root.mainloop() if __name__ == '__main__': main()