# AN25 課題No.09 ###### tags: `課題` activity_main.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:gravity="left"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="キー" /> <EditText android:id="@+id/EditKey" android:layout_width="400dp" android:layout_height="wrap_content" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="本文" /> <EditText android:id="@+id/Text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0.93" android:gravity="top" /> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" > <Button android:id="@+id/KeyWrite" android:layout_width="120dp" android:layout_height="match_parent" android:onClick="functionKeyWrite" android:text="保存" android:textSize="20sp" /> <Button android:id="@+id/KeyClear" android:layout_width="120dp" android:layout_height="match_parent" android:onClick="functionKeyClear" android:text="クリア" android:textSize="20sp" /> <Button android:id="@+id/KeyList" android:layout_width="120dp" android:layout_height="match_parent" android:onClick="functionKeyList" android:text="一覧" android:textSize="20sp" /> <Button android:id="@+id/KeyDelete" android:layout_width="120dp" android:layout_height="match_parent" android:onClick="functionKeyDelete" android:text="削除" android:textSize="20sp" /> </TableRow> </TableLayout> </LinearLayout> ``` listview.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:background="#ffffff" > <TextView android:id="@+id/mylistTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="30dip" android:textSize="20sp" android:textColor="#FF0000" /> <ListView android:id="@+id/myListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.93" /> <Button android:text="戻る" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="buttonMethod" /> </LinearLayout> ``` AndroidManifest.xml ```xml= <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="nhs00605.hal.ac.note_listview" android:targetSandboxVersion="2" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="30" /> <application android:allowBackup="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory" android:debuggable="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:testOnly="true" android:theme="@style/AppTheme" > <activity android:name="nhs00605.hal.ac.note_listview.MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="nhs00605.hal.ac.note_listview.ListShow" android:label="@string/app_name" > </activity> </application> </manifest> ``` MainActivity.java ```java= package nhs00605.hal.ac.note_listview; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import java.util.Calendar; import java.util.Date; import android.view.View; import android.widget.EditText; import android.widget.Toast; import android.database.*; import android.database.sqlite.*; import android.content.Intent; public class MainActivity extends AppCompatActivity { EditText et; EditText ekey; SQLiteDatabase db; SQLiteDatabase db2; String write_dateStr; int key_flag = 0; String select_key; String id_listshow = ""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText)findViewById(R.id.Text); ekey = (EditText)findViewById(R.id.EditKey);//keyを取得 //↓は一度実効したあとコメントアウトしなおす //first_database(); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ select_key = extras.getString("select_key"); id_listshow = extras.getString("id_primary"); String dbStr = "data/data/" + getPackageName() + "/nhs00605db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE id = '" + id_listshow + "'"; System.out.println(query_read); Cursor db_row = db.rawQuery(query_read,null); int id = 0; String keyword = ""; String memo = ""; Toast toast_read; while (db_row.moveToNext()){ key_flag = 1; int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_memo = db_row.getColumnIndex("memo"); id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); memo = db_row.getString(index_memo); } //intのidをString変換 String id_str = String.valueOf(id); //一覧から取得した主キーを基にキーワードとメモ表示 ekey.setText(keyword); et.setText(memo); //Toastで表示 if(key_flag == 0) { toast_read = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_read.show(); } else { toast_read = Toast.makeText(this, id_str + "の内容を読み込みました", Toast.LENGTH_SHORT); toast_read.show(); } key_flag = 0; } } //while文を使ってsqlから配列にすればできる…? public void functionKeyList(View v){ //「一覧」のSQL String dbStr = "data/data/" + getPackageName() + "/nhs00605db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_list = "SELECT * FROM memopad"; System.out.println(query_list); Cursor db_row = db.rawQuery(query_list,null); System.out.println(db_row); String keyword = ""; String write_date = ""; //ListShow.javaで一覧表示するためのデータ格納 String id_continue = ""; String keyword_continue = ""; String keywordanddate_continue = ""; //,区切りのデータ作成 id,keyword,memo,write_date while (db_row.moveToNext()){ int index_id = db_row.getColumnIndex("id"); int index_keyword = db_row.getColumnIndex("keyword"); int index_write_date = db_row.getColumnIndex("write_date"); int id = db_row.getInt(index_id); keyword = db_row.getString(index_keyword); write_date = db_row.getString(index_write_date); //id(int)をString変換 String id_str = String.valueOf(id); //ID if(id_continue != ""){ id_continue += "," + id_str; }else { id_continue += id_str; } //キーワード if(keyword_continue != ""){ keyword_continue += "," + keyword; }else { keyword_continue += keyword; } //キーワード+日付 if(keywordanddate_continue != ""){ keywordanddate_continue += "," + keyword + " " + write_date; }else { keywordanddate_continue += keyword + " " + write_date; } } //ListViewアクティビティを起動 Intent result_act = new Intent(MainActivity.this, ListShow.class); result_act.putExtra("id_continue",id_continue); result_act.putExtra("keywordanddate_continue",keywordanddate_continue); startActivity(result_act); } //「保存」(書き込み)のSQL public void functionKeyWrite(View v){ //「保存」のSQL String key = ekey.getText().toString(); String text = et.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00605db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); write_dateStr = now_date(); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; String query_insert = "INSERT INTO memopad(keyword,memo,write_date) VALUES('" + key + "','" + text + "','" + write_dateStr + "')"; Cursor db_row = db.rawQuery(query_read,null); db.execSQL(query_insert); System.out.println(query_insert); Toast toast_save; //Toastで表示 toast_save = Toast.makeText(this, key + "をキーに書き込みました", Toast.LENGTH_SHORT); toast_save.show(); key_flag = 0; } //本文クリア public void functionKeyClear(View v){ //「クリア」のSQL et.getEditableText().clear(); } //削除 public void functionKeyDelete(View v){ //「削除」のSQL String key = ekey.getText().toString(); String dbStr = "data/data/" + getPackageName() + "/nhs00605db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); db2 = SQLiteDatabase.openOrCreateDatabase(dbStr,null); String query_read = "SELECT * FROM memopad WHERE keyword = '" + key + "'"; Cursor db_row = db.rawQuery(query_read,null); while (db_row.moveToNext()){ key_flag = 1; ekey.getEditableText().clear(); et.getEditableText().clear(); } String query_delete = "DELETE FROM memopad WHERE keyword = '" + key + "'"; db2.execSQL(query_delete); Toast toast_delete; //Toastで表示 if(key_flag == 0) { toast_delete = Toast.makeText(this, "指定されたキーはありません", Toast.LENGTH_SHORT); toast_delete.show(); } else { toast_delete = Toast.makeText(this, key + "を削除しました", Toast.LENGTH_SHORT); toast_delete.show(); } key_flag = 0; } //初期にデータベース動かすコード private void first_database(){ //データベースを作成 String dbStr = "data/data/" + getPackageName() + "/nhs00605db"; db = SQLiteDatabase.openOrCreateDatabase(dbStr,null); //テーブル作成用のクエリ文 String query_table1 = "DROP TABLE IF EXISTS memopad"; String query_table2 = "CREATE TABLE memopad(id INTEGER PRIMARY KEY AUTOINCREMENT," + "keyword TEXT,memo TEXT,write_date TEXT)"; //テーブルの作成 db.execSQL(query_table1); db.execSQL(query_table2); //レコード追加 write_dateStr = now_date();//本日日付取得 String query_record_set[] = { "INSERT INTO memopad(keyword,memo,write_date) VALUES('test01','テスト01','" + write_dateStr +"')", "INSERT INTO memopad(keyword,memo,write_date) VALUES('test02','テスト02','" + write_dateStr +"')", "INSERT INTO memopad(keyword,memo,write_date) VALUES('test03','テスト03','" + write_dateStr +"')" }; for (int i=0; i<query_record_set.length; i++){ db.execSQL(query_record_set[i]); } } //本日の日付を返すメソッド private String now_date(){ //現在日取得 Date today = new Date(); //Calendarクラスオブジェクト生成 Calendar cal = Calendar.getInstance(); //Calendarオブジェクトに現在日付設定 cal.setTime(today); //年月日時分秒所得 int yy = cal.get(Calendar.YEAR); int mm = cal.get(Calendar.MONTH) + 1; int dd = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); String now_dateStr = yy + "/" + mm + "/" + dd + " " + hour + ":" + minute + ":" + second; return now_dateStr; } } ``` ListShow.java ```java= package nhs00605.hal.ac.note_listview; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.content.Intent; public class ListShow extends AppCompatActivity{ private TextView List_title; private ListView List_View; String[] listKey; String[] id_primary; String[] keywordanddate; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.listview); //IDから目的のウィジェットを得る List_title = (TextView)findViewById(R.id.mylistTitle); List_View= (ListView)findViewById(R.id.myListView); //インテントからキーを取得 Bundle extras = getIntent().getExtras(); if(extras != null){ String id_continue = extras.getString("id_continue"); String keywordanddate_continue = extras.getString("keywordanddate_continue"); id_primary = id_continue.split(","); keywordanddate = keywordanddate_continue.split(","); } //リストに表示する名称 //ヘッダ設定 String head_title = "メモ一覧(" + keywordanddate.length + "件)"; List_title.setText(head_title); //リストアダプタを作成 ArrayAdapter<String> myAdapter = new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1,keywordanddate); //リストアダプタをリストビューにセット List_View.setAdapter(myAdapter); //リスト選択処理 List_View.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick( AdapterView<?> parent,View v,int position, long id){ Log.d("onItemClick","position:" + String.valueOf(position)); String select_key = id_primary[position]; //int listshow_flag = 1; //ListShowアクティビティを起動 Intent result_act = new Intent(ListShow.this, MainActivity.class); result_act.putExtra("select_key",select_key); result_act.putExtra("id_primary",id_primary[position]); startActivity(result_act); } }); } //ボタンの処理 public void buttonMethod(View myButton){ Intent result_act = new Intent(ListShow.this, MainActivity.class); startActivity(result_act); } } ``` 河原 まだ私作ってないから動くはしらない 動きました mainactivity.javaが癖あるからそこだけちゃんと読んだほうがいい マニアッテヨカッタ ありがとうございます!!!!! ありがとー!!!!!🙇‍♂️