前提
リストの中のトグルボタンにSQLで取得した値を初期値として入れる方法が解りません。
一応「〇〇.setChecked(false);」で値を入れることはわかっていますが、どうやってリストの中のそれぞれの値を設定するかが解らないのです。(〇〇はトグルスイッチの名前)
追加してほしい情報があれば随時追加していきます。
該当のソースコード
SimpleCursorAdapterの中身 public class Sub_ListAdapter extends SimpleCursorAdapter { Sub_ListAdapter sc_adapter; // コンストラクタ public Sub_ListAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); } // 指定データのビューを取得 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); // 削除ボタン オブジェクトを取得 ImageButton btnDel = (ImageButton) view.findViewById(R.id.button_delete); CompoundButton toggleSwitch = (Switch) view.findViewById(R.id.toggle_switch); // ボタンにリスト内の位置を設定 btnDel.setTag(position); toggleSwitch.setTag(position); return view; } }
ublic class MainActivity3 extends AppCompatActivity { private DatabaseHelper helper = null; Sub_ListAdapter sc_adapter; //前の画面からの引数 private String name_p; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); FloatingActionButton fab = findViewById(R.id.fab); setSupportActionBar(findViewById(R.id.toolbar)); getSupportActionBar().setDisplayHomeAsUpEnabled(true); Intent intent = getIntent(); name_p = intent.getStringExtra(DBEntry_2.Name); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getApplication(), Add_task_3.class); intent.putExtra("name_p",name_p); startActivity(intent); } }); } @Override public void onStart(){ super.onStart(); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setTitle("〇〇"); } helper = new DatabaseHelper(this); onShow(); } // データを一覧表示 protected void onShow() { // データベースヘルパーを準備 helper = new DatabaseHelper(this); // データベースを検索する項目を定義 String sql = "SELECT Child._id,Child.Name FROM Child WHERE Child.Parent = ?;"; String[] selectionArgs ={name_p}; // 読み込みモードでデータベースをオープン try (SQLiteDatabase db = helper.getReadableDatabase()){ // データベースを検索 Cursor cursor = db.rawQuery(sql, selectionArgs); // 検索結果から取得する項目を定義 String[] from = {DBEntry_2.Name}; // データを設定するレイアウトのフィールドを定義 int[] to = {R.id.title}; // ListViewの1行分のレイアウト(row_main.xml)と検索結果を関連付け sc_adapter = new Sub_ListAdapter( this, R.layout.raw_sub,cursor,from,to,0); // activity_main.xmlに定義したListViewオブジェクトを取得 ListView list = findViewById(R.id.mainList); // ListViewにアダプターを設定 list.setAdapter(sc_adapter); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="horizontal" android:descendantFocusability="blocksDescendants"> <Switch android:id="@+id/toggle_switch" android:layout_width="74dp" android:layout_height="48dp" android:minHeight="48dp" android:onClick="btnSwi_click" android:textColor="#3e3e3e" /> <TextView android:id="@+id/title" android:layout_width="265dp" android:layout_height="wrap_content" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" android:textSize="32dp" /> <ImageButton android:id="@+id/button_delete" android:layout_width="50dp" android:layout_height="wrap_content" android:background="#00000000" android:contentDescription="@string/app_name" android:gravity="center_horizontal|center_vertical" android:onClick="btnDel_onClick" android:src="@android:drawable/ic_menu_close_clear_cancel" /> </LinearLayout>
public class DatabaseHelper extends SQLiteOpenHelper { static final private int VERSION = 2; static final private String DBNAME = "Task.db"; public DatabaseHelper(Context context) { super(context, DBNAME, null, VERSION); } public void onCreate(SQLiteDatabase db) { // テーブルを作成 db.execSQL( "CREATE TABLE "+ DBEntry.Table_Name + " (" + DBEntry._ID + " INTEGER PRIMARY KEY, " + DBEntry.Name + " TEXT default 'カテゴリー名'" + " ) " ); db.execSQL( "CREATE TABLE "+ DBEntry_2.Table_Name + " (" + DBEntry_2._ID + " INTEGER PRIMARY KEY, " + DBEntry_2.Name + " TEXT default 'タスク名', " + DBEntry_2.flag + " INTEGER default '0'," + DBEntry_2.category + " TEXT default ' ', " + DBEntry_2.parent + " TEXT default ' ', " + DBEntry_2.child + " TEXT default ' ', " + DBEntry_2.Date + " INTEGER DEFAULT (datetime(CURRENT_TIMESTAMP,'localtime')), " + DBEntry_2.Data_flag + " INTEGER default '0', " + DBEntry_2.ranking + " INTEGER default '0', " + DBEntry_2.prerequisite + " TEXT default '前提条件' " + " ) " ); db.execSQL( "CREATE TRIGGER trigger_samp_tbl_update AFTER UPDATE ON " + DBEntry.Table_Name + " BEGIN "+ " UPDATE " + DBEntry.Table_Name + " SET up_date = DATETIME('now', 'localtime') WHERE rowid == NEW.rowid; "+ " END;"); } // データベースをバージョンアップした時、テーブルを削除してから再作成 public void onUpgrade(SQLiteDatabase db, int i, int i1) { db.execSQL("DROP TABLE IF EXISTS " + DBEntry.Table_Name); onCreate(db); } }
回答1件
あなたの回答
tips
プレビュー