๋ฐ์ํ
โ ์์ฑํ ๋ทฐ
[O] ์๋ก์ด ๋ฉ๋ชจ ์ถ๊ฐ
[O] ๋ฉ๋ชจ ํด๋ฆญ์ ํธ์ง
[O] ๋ฉ๋ชจ ๋กฑํด๋ฆญ์ ์ญ์ ๊ฐ๋ฅ
[X] ๊ฒ์
โ ์์ฑํ ์ฝ๋
MainActivity
package com.example.memoapplication;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class MainActivity extends AppCompatActivity {
ArrayList<Memo> memoArrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().hide();
ImageButton backBtn = findViewById(R.id.main_btn_back);
ImageButton searchBtn = findViewById(R.id.main_btn_search);
ImageButton newBtn = findViewById(R.id.main_btn_add_text);
TextView memoCount = findViewById(R.id.main_tv_count);
//DBHelper ๊ฐ์ฒด ์์ฑ
String dbName = "Memo.db";
int dbVersion =1;
final DBHelper dbHelper;
// memoArrayList ์ ๋ฐ์ดํฐ ๊ฐ์ ๋ฃ์ด์ ๊ฐ์ ธ์์ฃผ๊ธฐ
dbHelper = new DBHelper(this,dbName,null,dbVersion);
final SQLiteDatabase db = dbHelper.getReadableDatabase();
final String sql = "SELECT * FROM Memo;";
Cursor cursor = db.rawQuery(sql,null);
memoCount.setText(String.valueOf(cursor.getCount())); // ๋ฉ๋ชจ์ฅ ๊ฐฏ์ ์บ์คํ
try{
if(cursor.getCount()>0)
{
while(cursor.moveToNext())
{
// ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์๋ ๊ฐ๋ค์ string ๊ฐ์ Memo ํด๋์ค ์์ฑ์์ ๋ด์์ ๋ง๋ค์ด ์ค๋ค.
// ๋๋ฏธ ๋ฐ์ดํฐ๊ฐ ์๋, ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์๋ ๊ฐ๋ค์ ๋ฃ์ด์ฃผ๋ ์์
.
Memo m = new Memo(cursor.getString(1),cursor.getString(2));
memoArrayList.add(m);
}
}
}finally {
cursor.close();
}
// Dummies
// memoArrayList.add(new Memo("Today's Diary", "a;laj;alksjdg;lasjdgljewjf;aklvmjdlfjl;aksnvldfddasdfasdfadfasdfasdfadsfaa"));
// memoArrayList.add(new Memo("TO DO LIST", "aasvadsgmjdlfjl;aksnvldfddasdfasdfadfasdfasdfadsfaa"));
// memoArrayList.add(new Memo("Homework", "aasdgasdgdgljewjf;aklvmjdlfjl;aksnvldfddasdfasdfadfasdfasdfadsfaa"));
// ๋ฆฌ์คํธ ๋ทฐ ์ฐ๊ฒฐ
final ListView listView = findViewById(R.id.main_lv_memo_list);
MemoAdapter memoAdapter = new MemoAdapter(memoArrayList,this);
listView.setAdapter(memoAdapter);
// ๋ฆฌ์คํธ ๋ทฐ ๋ด ์์ดํ
ํด๋ฆญ์ → Edit ์กํฐ๋นํฐ๋ก ๋์ด๊ฐ๋ค.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// ๋ฆฌ์คํธ ๋ทฐ๋ฅผ ๋๋ฅผ ๋ EditActivity ๋ก ๋์ด๊ฐ์ผํ๋ค.
// ์ด๋ ํด๋ฆญ๋ ๊ฐ์ ํด๋นํ๋ title ๊ณผ, contents ๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ ์ค์ผ ํ๋ค.
int check_position = listView.getCheckedItemPosition(); //๋ฆฌ์คํธ ๋ทฐ์ ํฌ์ง์
์ ๊ฐ์ ธ์ด.
Memo vo =(Memo)parent.getAdapter().getItem(position); //๋ฆฌ์คํธ ๋ทฐ์ ํฌ์ง์
๊ฐ์ ธ์ด.
String t_title = vo.getTitle();
String c_contents =vo.getContents();
Intent intent = new Intent(MainActivity.this,EditActivity.class);
intent.putExtra("title",t_title);
intent.putExtra("contents",c_contents);
intent.putExtra("position",position);
startActivity(intent);
finish();
}
});
// ๋ฆฌ์คํธ ๋ทฐ ๋ด ์์ดํ
๋กฑ ํด๋ฆญ์ → AlertDialog ๋ก "์ญ์ " ๊ฐ ๋จ๊ณ "์ญ์ "๋ฅผ ๋๋ฅผ์์ ๊ทธ ์์ดํ
์ญ์
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Memo vo =(Memo)parent.getAdapter().getItem(position); //๋ฆฌ์คํธ ๋ทฐ์ ํฌ์ง์
๊ฐ์ ธ์ด.
final String t_title = vo.getTitle();
String c_contents =vo.getContents();
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// ๋ฉ๋ชจ ์ญ์ ์์
String sql0 ="DELETE FROM Memo WHERE title = '"+ t_title +"';";
db.execSQL(sql0);
Intent intent = new Intent(MainActivity.this, MainActivity.class);
finish();
startActivity(intent);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("Do you want to delete this memo?");
builder.setTitle("Delete Notification");
builder.show();
return true;
}
});
// ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ ๋๋ฅผ ์์ ์ฒ๋ฆฌ.
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// ์ด ์กํฐ๋นํฐ ์ข
๋ฃ
finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("Do you want to quit this app?");
builder.setTitle("Exit Notification");
builder.show();
}
});
// ์ฐพ๊ธฐ ๋ฒํผ ๋๋ฅผ ์์ ์ฒ๋ฆฌ
searchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// alertDialog ๊ฐ ์๋๋ผ dialog ๋ฅผ ์ฌ์ฉํด๋ณผ๊ฑด๋ฐ, ๊ทธ๋ฌ๋ ค๋จผ xml ํ์ผ์ด ๋ฐ๋ก ํ์ํ๋ค.
Dialog dialog = new Dialog(MainActivity.this);
dialog.setContentView(R.layout.search_dialog);
dialog.show();
ImageButton dialog_search_btn = dialog.findViewById(R.id.search_dialog_btn);
final EditText dialog_search_et = dialog.findViewById(R.id.search_dialog_et_title);
dialog_search_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String title = dialog_search_et.getText().toString();
String sql0 ="SELECT * FROM Memo WHERE title = '"+ title +"';";
Cursor cs = db.rawQuery(sql0,null);
String get_title = cs.getString(1);
String get_contents = cs.getString(2);
Intent intent = new Intent(MainActivity.this,EditActivity.class);
intent.putExtra("title",get_title);
intent.putExtra("contents",get_contents);
startActivity(intent);
finish();
}
});
}
});
// New ๋ฒํผ ๋๋ฅผ ์์ ์ฒ๋ฆฌ → detail Activity ๋ก ๋ณด๋ด์ฃผ๊ณ ๊ฑฐ๊ธฐ์ ๋ฐ์ดํฐ ์ถ๊ฐ ํ๊ฒ๋ ํ ๊ฒ์ด๋ค.
newBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,DetailActivity.class);
finish(); //์๊พธ ์์ด๋ ๊ฒ ๋ฐฉ์ง.
startActivity(intent);
}
});
}
}
EditActivity
package com.example.memoapplication;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
public class EditActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().hide();
//DBHelper ๊ฐ์ฒด ์์ฑ
String dbName = "Memo.db";
int dbVersion =1;
final DBHelper dbHelper;
dbHelper = new DBHelper(this,dbName,null,dbVersion);
Intent intent = getIntent();
final String got_title = intent.getStringExtra("title");
String got_contents = intent.getStringExtra("contents");
int got_positon = intent.getIntExtra("position",0);
final EditText title = findViewById(R.id.detail_et_title);
final EditText contents = findViewById(R.id.detail_et_contents);
ImageButton save_btn = findViewById(R.id.detail_ib_save);
ImageButton cancel_btn = findViewById(R.id.detail_ib_cancel);
ImageButton back_btn = findViewById(R.id.detail_ib_back);
title.setText(got_title);
contents.setText(got_contents);
save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ์ด ๋ฐ์ดํฐ ๊ฐ์ ๋ฐ๊ฟ์ค์ผ ํ๋ค.
// ๋ฐ์์จ title ๋ก ์กฐํํด์ ๋ฐ๊พผ๋ค.
SQLiteDatabase db = dbHelper.getWritableDatabase();
String final_title = title.getText().toString();
String final_contents = contents.getText().toString();
String sql = "UPDATE Memo SET title='"+final_title+"',contents='"+final_contents+"'WHERE title='"+got_title+"';";
db.execSQL(sql);
AlertDialog.Builder builder = new AlertDialog.Builder(EditActivity.this);
builder.setNegativeButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("The note has been saved well :)");
builder.setTitle("Notification");
builder.show();
}
});
cancel_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ๋ฉ์ธ์ผ๋ก ๋ค์
Intent intent = new Intent(EditActivity.this, MainActivity.class);
finish();
startActivity(intent);
}
});
back_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// ๋ฉ์ธ์ผ๋ก ๋ค์
Intent intent = new Intent(EditActivity.this, MainActivity.class);
finish();
startActivity(intent);
}
});
}
@Override
protected void onPause() {
super.onPause();
}
}
DetailActivity
package com.example.memoapplication;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
public class DetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
getSupportActionBar().hide();
//DBHelper ๊ฐ์ฒด ์์ฑ
String dbName = "Memo.db";
int dbVersion =1;
final DBHelper dbHelper;
dbHelper = new DBHelper(this,dbName,null,dbVersion);
final EditText title = findViewById(R.id.detail_et_title);
final EditText contents = findViewById(R.id.detail_et_contents);
ImageButton save_btn = findViewById(R.id.detail_ib_save);
ImageButton cancel_btn = findViewById(R.id.detail_ib_cancel);
// final String titleStr = title.getText().toString();
// final String contentsStr =contents.getText().toString();
// save_btn ์ ๋๋ฅด๋ฉด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ค์ด๊ฐ๋ค.
save_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String titleStr = title.getText().toString();
String contentsStr =contents.getText().toString();
SQLiteDatabase db = dbHelper.getWritableDatabase();
String sql = String.format("INSERT INTO Memo VALUES(NULL,'%s','%s');", titleStr, contentsStr);
db.execSQL(sql);
// ์ ์ฅ ๋๋ค๋ฉด toast ๋ฉ์ธ์ง ๊ฐ์ ๊ฑฐ ๋์ฐ๊ธฐ
Toast.makeText(getApplicationContext(),"save well.",Toast.LENGTH_SHORT).show();
}
});
// cancel_btn ์ ๋๋ฅด๋ฉด ์ด ์กํฐ๋นํฐ ๋๋ด๊ณ main ํ๋ฉด ๋์๊ฐ๋ค.
cancel_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(DetailActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
});
}
@Override
// ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ฉด, Alert ๋จ๊ณ ์ด ์กํฐ๋นํฐ ์์ ๊ณ Main ์ผ๋ก ๋์๊ฐ๊ฒ.
public void onBackPressed() {
super.onBackPressed();
AlertDialog.Builder builder = new AlertDialog.Builder(DetailActivity.this);
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(DetailActivity.this,MainActivity.class);
startActivity(intent);
finish();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.setMessage("back to the previous screen?");
builder.setTitle("Notification");
builder.show();
}
@Override
protected void onPause() {
// ์์ฑ ์ค์ธ ๋ฉ๋ชจ contents ์ ์ฅ ํด ๋์์ผ ํ๋ค.
super.onPause();
}
}
DBHelper
package com.example.memoapplication;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
// DB ์ฒ์ ๋ง๋ค ๋ ํ๋ฒ๋ง ํธ์ถ : ํ
์ด๋ธ ์์ฑ
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Memo (id INTEGER PRIMARY KEY AUTOINCREMENT," +
"title String PRIMARY KEY, contents String);");
}
// ๋ฒ์ ์
๋ฐ์ดํธ ๋๋ฉด DB๋ฅผ ๋ค์ ๋ง๋ ๋ค.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS Memo");
onCreate(db);
}
}
Memo
package com.example.memoapplication;
public class Memo {
String title;
String contents;
public Memo(String title, String contents) {
this.title = title;
this.contents = contents;
}
public String getContents() {
return contents;
}
public String getTitle() {
return title;
}
}
MemoAdapter
package com.example.memoapplication;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import java.util.ArrayList;
public class MemoAdapter extends BaseAdapter {
ArrayList<Memo> memoArrayList = new ArrayList<>();
Context mContext;
public MemoAdapter(ArrayList<Memo> memoArrayList, Context mContext) {
this.memoArrayList = memoArrayList;
this.mContext = mContext;
}
@Override
public int getCount() {
return memoArrayList.size();
}
@Override
public Object getItem(int position) {
return memoArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.item_memo,parent,false);
TextView tvTitle = itemView.findViewById(R.id.memo_tv_title);
TextView tvContents = itemView.findViewById(R.id.memo_tv_contents);
tvTitle.setText(memoArrayList.get(position).title);
tvContents.setText(memoArrayList.get(position).contents);
return itemView;
}
}
โ ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ
objectํด๋์ค์ getClass ๋ฉ์๋๋?
โ
Android Cursor๋ฅผ ์ด์ฉํ DB ๋ฐ์ดํฐ ์ฌ์ฉํ๊ธฐ
arabiannight.tistory.com/entry/368
ํ ์คํธ ๋ฉ์ธ์ง ๋์ฐ๊ธฐ
โ
๋ชจ๋ Activity์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ์ ์ฅ -DB ์ฌ์ฉ๋ฒ
m.blog.naver.com/PostView.nhn?blogId=hg1286&logNo=220539030447&proxyReferer=https:%2F%2Fwww.google.com%2F
๋ฆฌ์คํธ ํญ๋ชฉ ํด๋ฆญ
๋กฑํด๋ฆญ
๋ฐ์ํ
'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android::SwipeMenuList (0) | 2020.08.01 |
---|---|
Android::RecyclerView, Lottie, Animation ์ฌ์ฉํด์ ๋ฉ๋ชจ์ฅ ์ฑ ์์ ํ๊ธฐ (0) | 2020.07.30 |
Android::Java ๋ฌธ๋ฒ +๏ผ (0) | 2020.07.21 |
Android:: countDownTimer & Lifecycle (0) | 2020.07.21 |
Android::LifeCycle ํ์ฉํ์ฌ App๋ง๋ค๊ธฐ (0) | 2020.07.21 |
๋๊ธ