Android Memo 어플 소스를 RecyclerView 를 이용하여 수정했다.
SQLite 함수 일부분을 수정한 것은 같이 포함시켰다.
DBHelper.java 수정
public class DbHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "data2"; public static final String TABLE_NAME = "comments_table"; public static final String C_ID = "_id"; public static final String TITLE = "title"; public static final String TYPE = "type"; public static final String DETAIL = "description"; public static final String TIME = "time"; public static final String DATE = "date"; public static final int DATABASE_VERSION = 2;
private final String createDB = "create table if not exists " + TABLE_NAME + " ( " + C_ID + " integer primary key autoincrement, " + TITLE + " text, " + DETAIL + " text, " + TYPE + " text, " + TIME + " text, " + DATE + " text)";
public DbHelper(Context context){ super(context, DATABASE_NAME, null, DATABASE_VERSION); }
@Override public void onCreate(SQLiteDatabase db) { db.execSQL(createDB); }
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table " + TABLE_NAME); }
public Cursor LoadSQLiteDBCursor() { SQLiteDatabase db = this.getReadableDatabase(); db.beginTransaction(); // Select All Query String selectQuery = "SELECT _id,title,type,description,time,date FROM " + TABLE_NAME; Cursor cursor = null; try { cursor = db.rawQuery(selectQuery, null); db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { db.endTransaction(); } return cursor; }
}
|
MainActivity.java 수정
import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity { Context context;
SQLiteDatabase db; DbHelper mDbHelper;
private RecyclerView listView; private ArrayList<Memo_Item> memoItemList= new ArrayList<>(); // SQLite에서 가져온 원본 데이터 리스트 RecyclerView.Adapter listViewAdapter; // ListViewAdapter 대신 RecyclerView.Adapter RecyclerView.LayoutManager layoutManager;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this.getBaseContext();
listView = (RecyclerView)findViewById(R.id.commentslist); listView.setHasFixedSize(true);
memoItemList.clear(); // 데이터 초기화 mDbHelper = new DbHelper(this); db= mDbHelper.getReadableDatabase(); db.beginTransaction();
Cursor cursor = mDbHelper.LoadSQLiteDBCursor(); try { cursor.moveToFirst(); System.out.println("SQLiteDB 개수 = " + cursor.getCount()); while (!cursor.isAfterLast()) { addGroupItem(cursor.getLong(0),cursor.getString(1),cursor.getString(2), cursor.getString(3),cursor.getString(4),cursor.getString(5)); cursor.moveToNext(); } db.setTransactionSuccessful(); } catch (Exception e) { e.printStackTrace(); } finally { if (cursor != null) { cursor.close(); db.endTransaction(); } }
// Set Layout Manager LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.VERTICAL); listView.setLayoutManager(layoutManager);
listViewAdapter = new ListViewAdapter(memoItemList, this); // Adapter 생성 listView.setAdapter(listViewAdapter); // 어댑터를 리스트뷰에 세팅 }
public void addGroupItem(Long uid, String title, String memo_type, String detail, String time, String date){ Memo_Item item = new Memo_Item(); item.setUid(uid); item.setTitle(title); item.setMemo_type(memo_type); item.setDetail(detail); item.setTime(time); item.setDate(date); memoItemList.add(item); }
@Override public void onBackPressed() { moveTaskToBack(true); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) { case R.id.action_new: Intent openCreateNote = new Intent(MainActivity.this, CreateNote.class); startActivity(openCreateNote); return true;
default: return super.onOptionsItemSelected(item); } }
}
|
Memo_Item.java 클래스 만들기
public class Memo_Item { private Long uid; private String title; // 제목 private String memo_type; // 메모 타입 private String detail; // 내용 private String time; // 시간 private String date; // 작성일자
public Memo_Item() {
}
public Memo_Item(Long uid, String title, String memo_type, String detail, String time, String date) { this.uid = uid; this.title = title; this.memo_type = memo_type; this.detail = detail; this.time = time; this.date = date; }
public Long getUid() { return uid; }
public void setUid(Long uid) { this.uid = uid; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getMemo_type() { return memo_type; }
public void setMemo_type(String memo_type) { this.memo_type = memo_type; }
public String getDetail() { return detail; }
public void setDetail(String detail) { this.detail = detail; }
public String getTime() { return time; }
public void setTime(String time) { this.time = time; }
public String getDate() { return date; }
public void setDate(String date) { this.date = date; } }
|
ListViewAdapter 어댑터 클래스 만들기
import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class ListViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { Context mContext; private ArrayList<Memo_Item> IvList; int Position;
public ListViewAdapter(ArrayList<Memo_Item> items, Context context) { IvList = items; mContext = context; }
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_entry, parent, false); return new ViewHolder(view); }
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // ListView의 getView 부분을 담당하는 메소드 ((ViewHolder) holder).onBind(IvList.get(position)); }
@Override public int getItemCount() { return IvList.size(); // 데이터 개수 리턴 }
public class ViewHolder extends RecyclerView.ViewHolder { public TextView mTitle; public TextView memoType; public TextView mDetail; public ImageView mImage; public TextView mTime; public TextView mDate;
public ViewHolder(View itemView) { super(itemView); // 화면에 표시될 View 로부터 위젯에 대한 참조 획득 mTitle = itemView.findViewById(R.id.title); memoType = itemView.findViewById(R.id.type); mDetail = itemView.findViewById(R.id.Detail); mImage = itemView.findViewById(R.id.alarmImage); mTime = itemView.findViewById(R.id.time); mDate = itemView.findViewById(R.id.date);
itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Position = getAdapterPosition(); Intent intent = new Intent(mContext, View_Note.class); intent.putExtra(mContext.getString(R.string.row_id),IvList.get(Position).getUid()); Log.e("rowID", String.valueOf(IvList.get(Position).getUid())); mContext.startActivity(intent); } }); }
public void onBind(Memo_Item item) { mTitle.setText(item.getTitle()); memoType.setText(item.getMemo_type()); mDetail.setText(item.getDetail()); int resourceId = R.drawable.ic_action_alarms; Glide.with(mContext).load(resourceId).into(mImage); mTime.setText(item.getTime()); mDate.setText(item.getDate()); } } }
|
activity_main.xml 수정
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" >
<androidx.recyclerview.widget.RecyclerView android:id="@+id/commentslist" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
</RelativeLayout>
|
build.gradle 수정
apply plugin: 'com.android.application'
android { compileSdkVersion 28
defaultConfig { applicationId "com.tistory.link2me.memo" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }
}
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'gun0912.ted:tedpermission:2.0.0' implementation 'com.github.bumptech.glide:glide:3.8.0' // 이미지 라이브러리 }
|
나머지는 수정한 사항이 없다.
기존 소스코드를 이렇게 수정하면 된다.
memo_src.zip