Java ListView复选框
我正在创建一个用于交流学习的Android应用程序 我制作了一个单词列表,它包含一个复选框和文本视图,文本视图显示单词,使用复选框确定我在列表视图中选择的项目 我使用“提交”按钮将单词的id存储在SQLite中。当我再次关闭并打开“活动”时,我希望看到复选框,但此代码仅保存到我的数据库中,而在我再次打开“活动”时不显示所选项目 这是活动Java ListView复选框,java,android,checkbox,android-sqlite,listviewitem,Java,Android,Checkbox,Android Sqlite,Listviewitem,我正在创建一个用于交流学习的Android应用程序 我制作了一个单词列表,它包含一个复选框和文本视图,文本视图显示单词,使用复选框确定我在列表视图中选择的项目 我使用“提交”按钮将单词的id存储在SQLite中。当我再次关闭并打开“活动”时,我希望看到复选框,但此代码仅保存到我的数据库中,而在我再次打开“活动”时不显示所选项目 这是活动 public class PerkembanganLevel1 extends AppCompatActivity{ private ContentD
public class PerkembanganLevel1 extends AppCompatActivity{
private ContentDao contentDao;
private ChildDao childDao;
private Child anakYangDipilih;
public Global global;
private AssessmentDao assessmentDao;
private Assessment assessment;
String idYangSudahBisa;
PerkembanganAdapter perkembanganAdapter = null;
ContentHistory contentHistory;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_perkembangan_level1);
contentDao = new ContentDao(this);
contentDao.open();
childDao = new ChildDao(this);
childDao.open();
anakYangDipilih = ((Global) getApplicationContext()).getChild();
idYangSudahBisa = anakYangDipilih.getLevel1();
ArrayList<ContentHistory> listKataLevel1 = (ArrayList<ContentHistory>) contentDao.getAllWordByLevel(1);
perkembanganAdapter = new PerkembanganAdapter(this, R.layout.list_perkembangan, listKataLevel1);
ListView level1 = findViewById(R.id.LVPlv1);
level1.setAdapter(perkembanganAdapter);
Log.i("listKataLevel1 ", String.valueOf(listKataLevel1));
level1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
contentHistory = (ContentHistory) parent.getItemAtPosition(position);
}
});
findViewById(R.id.BtnPLv1Submit).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
idYangSudahBisa = perkembanganAdapter.idYangSudahBisa();
anakYangDipilih.getId();
anakYangDipilih.setLevel1(idYangSudahBisa);
anakYangDipilih.setCreatedBy(((Global) getApplicationContext()).getTherapist().getId());
anakYangDipilih.setUpdatedBy(((Global) getApplicationContext()).getTherapist().getId());
anakYangDipilih.setCreatedDate(new Date());
anakYangDipilih.setUpdatedDate(new Date());
anakYangDipilih = childDao.saveChild(anakYangDipilih);
Toast.makeText(PerkembanganLevel1.this, "Perkembangan Anak pada level 1 Berhasil Diperbarui", Toast.LENGTH_SHORT).show();
}
});
}
}
公共类PerkeBanganLevel 1扩展了AppCompative活动{
私有ContentDao ContentDao;
私生子道;
独生子女anakYangDipilih;
全球公共服务;
私人评估;
私人评估;
弦伊丹苏达比萨;
perkenbanganadapter perkenbanganadapter=null;
内容历史;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_Perkenbangan_level1);
contentDao=新contentDao(this);
contentDao.open();
childDao=新的childDao(本);
childDao.open();
anakYangDipilih=((全局)getApplicationContext()).getChild();
idYangSudahBisa=anakYangDipilih.getLevel1();
ArrayList listKataLevel1=(ArrayList)contentDao.getAllWordByLevel(1);
Perkenbanganadapter=新的Perkenbanganadapter(此,R.layout.list_Perkenbangan,listKataLevel1);
ListView级别1=findViewById(R.id.LVPlv1);
级别1.设置适配器(Perkenbanganadapter);
Log.i(“listKataLevel1”,String.valueOf(listKataLevel1));
level1.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
contentHistory=(contentHistory)parent.getItemAtPosition(position);
}
});
findviewbyd(R.id.BtnPLv1Submit).setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
idYangSudahBisa=perkenbanganadapter.idYangSudahBisa();
anakYangDipilih.getId();
anakYangDipilih.setLevel1(idYangSudahBisa);
anakYangDipilih.setCreatedBy(((全局)getApplicationContext()).getTherapeist().getId());
anakYangDipilih.setUpdatedBy(((全局)getApplicationContext()).getTherapist().getId());
anakYangDipilih.setCreatedDate(新日期());
anakYangDipilih.setUpdatedDate(新日期());
anakYangDipilih=childDao.saveChild(anakYangDipilih);
Toast.makeText(perkenbanganlevel1.this,“perkenbangan Anak pada level 1 Berhasil Diperbarui”,Toast.LENGTH_SHORT.show();
}
});
}
}
这是适配器
public class PerkembanganAdapter extends ArrayAdapter<ContentHistory> {
String idYangSudahBisa;
private ChildDao childDao;
private Child anakYangDipilih;
public ArrayList<ContentHistory> contentHistories;
public PerkembanganAdapter(Context context, int id, ArrayList<ContentHistory> contentHistories){
super(context, id, contentHistories);
this.contentHistories = new ArrayList<>();
this.contentHistories.addAll(contentHistories);
childDao = new ChildDao(getContext());
childDao.open();
anakYangDipilih = ((Global) context.getApplicationContext()).getChild();
this.idYangSudahBisa = anakYangDipilih.getLevel1();
}
private class ViewHolder{
TextView title;
CheckBox checkBoxes;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null){
LayoutInflater layoutInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.list_perkembangan, null);
viewHolder = new ViewHolder();
viewHolder.title = convertView.findViewById(R.id.TVListPerkembangan);
viewHolder.checkBoxes = convertView.findViewById(R.id.CBListPerkembangan);
convertView.setTag(viewHolder);
viewHolder.checkBoxes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
ContentHistory contentHistory = (ContentHistory) checkBox.getTag();
contentHistory.setSelected(checkBox.isChecked());
if (checkBox.isChecked()){
idYangSudahBisa = idYangSudahBisa + ","+contentHistory.getId();
//Toast.makeText(getContext(), ""+idYangSudahBisa,Toast.LENGTH_SHORT).show();
} else {
idYangSudahBisa = idYangSudahBisa.replace(","+contentHistory.getId(), "");
//Toast.makeText(getContext(), ""+idYangSudahBisa,Toast.LENGTH_SHORT).show();
}
}
});
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
ContentHistory contentHistory = contentHistories.get(position);
viewHolder.title.setText(contentHistory.getTitle());
viewHolder.checkBoxes.setChecked(contentHistory.getSelected());
viewHolder.checkBoxes.setTag(contentHistory);
return convertView;
}
public String idYangSudahBisa(){
return this.idYangSudahBisa;
}
}
...
公共类PerkeBanganadapter扩展了ArrayAdapter{
弦伊丹苏达比萨;
私生子道;
独生子女anakYangDipilih;
公共ArrayList内容历史;
公共PerkeBanganadapter(上下文上下文、int-id、ArrayList内容历史记录){
super(上下文、id、contentHistories);
this.contentHistories=新的ArrayList();
this.contentHistories.addAll(contentHistories);
childDao=新的childDao(getContext());
childDao.open();
anakYangDipilih=((全局)context.getApplicationContext()).getChild();
this.idYangSudahBisa=anakYangDipilih.getLevel1();
}
私有类视窗持有者{
文本视图标题;
复选框;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
ViewHolder ViewHolder=null;
if(convertView==null){
LayoutInflater LayoutInflater=(LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=LayoutFlater.充气(R.layout.list_Perkenbangan,空);
viewHolder=新的viewHolder();
viewHolder.title=convertView.findViewById(R.id.tvlistperkenbangan);
viewHolder.checkbox=convertView.findViewById(R.id.cblistperkenbangan);
convertView.setTag(viewHolder);
viewHolder.checkbox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
复选框=(复选框)v;
ContentHistory ContentHistory=(ContentHistory)checkBox.getTag();
contentHistory.setSelected(checkBox.isChecked());
如果(checkBox.isChecked()){
idYangSudahBisa=idYangSudahBisa+“,”+contentHistory.getId();
//Toast.makeText(getContext(),“”+idiangsudahbisa,Toast.LENGTH_SHORT).show();
}否则{
idYangSudahBisa=idYangSudahBisa.replace(“,”+contentHistory.getId(),”);
//Toast.makeText(getContext(),“”+idiangsudahbisa,Toast.LENGTH_SHORT).show();
}
}
});
}否则{
viewHolder=(viewHolder)convertView.getTag();
}
ContentHistory ContentHistory=contentHistories.get(位置);
viewHolder.title.setText(contentHistory.getTitle());
viewHolder.checkbox.setChecked(contentHistory.getSelected());
viewHolder.checkbox.setTag(contentHistory);
返回视图;
}
公共字符串idYangSudahBisa(){
归还这个。idYangSudahBisa;
}
}
...
不需要提交按钮,因为单击复选框时,您可以实时更新(toggele)数据库
重要的方面是在ContentDao中添加了一个方法,例如:-
public void toggleCheckedById(long id) {
db.execSQL(
"UPDATE " + TABLE_NAME +
" SET " + COLUMN_CHECKED + " = NOT " + COLUMN_CHECKED +
" WHERE " + COLUMN_ID + "=?",
new String[]{String.valueOf(id)}
);
}
- T
public class DatabaseHelper extends SQLiteOpenHelper { public static final String DBNAME = "perkembangan.db"; public static final int DBVERSION = 1; private static DatabaseHelper sInstance; private DatabaseHelper(Context context) { super(context, DBNAME, null, DBVERSION); } public static synchronized DatabaseHelper getInstance(Context context) { if (sInstance == null) { sInstance = new DatabaseHelper(context); } return sInstance; } @Override public void onCreate(SQLiteDatabase db) { String createContentSQL = "CREATE TABLE IF NOT EXISTS " + ContentDao.TABLE_NAME + "(" + ContentDao.COLUMN_ID + " INTEGER PRIMARY KEY, " + ContentDao.COLUMN_NAME + " TEXT, " + ContentDao.COLUMN_CHECKED + " INTEGER DEFAULT 0" + ")"; db.execSQL(createContentSQL); /* ADD SOME TESTING DATA WHEN THE DATABASE IS CREATED */ ContentValues cv = new ContentValues(); for (int i=0; i < 3; i++) { cv.clear(); cv.put(ContentDao.COLUMN_NAME,"Name" + String.valueOf(i)); db.insert(ContentDao.TABLE_NAME,null,cv); } } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public static String qualifyColumnName(String table, String column) { return table + "." + column; } }
public class ContentDao { private static DatabaseHelper sInstance; private static SQLiteDatabase db; public static final String TABLE_NAME = "content"; public static final String COLUMN_ID = BaseColumns._ID; public static final String QUALIFIEDCOLUMN_ID = DatabaseHelper.qualifyColumnName(TABLE_NAME,COLUMN_ID); public static final String COLUMN_NAME = "name"; public static final String COLUMN_CHECKED = "checked"; public ContentDao(Context context) { db =(sInstance = DatabaseHelper.getInstance(context)).getWritableDatabase(); } public void toggleCheckedById(long id) { db.execSQL( "UPDATE " + TABLE_NAME + " SET " + COLUMN_CHECKED + " = NOT " + COLUMN_CHECKED + " WHERE " + COLUMN_ID + "=?", new String[]{String.valueOf(id)} ); } public SQLiteDatabase getDb() { return db; } public int updateCheckedById(ContentHistory ch) { ContentValues cv = new ContentValues(); cv.put(COLUMN_CHECKED,ch.isChecked()); return db.update(TABLE_NAME,cv,COLUMN_ID + "=?",new String[]{String.valueOf(ch.getId())}); } public ArrayList<ContentHistory> getContentHistory() { ArrayList<ContentHistory> rv = new ArrayList<>(); Cursor csr = db.query(TABLE_NAME,null,null,null,null,null,null); while (csr.moveToNext()) { rv.add(new ContentHistory(csr.getLong(csr.getColumnIndex(COLUMN_ID)), csr.getString(csr.getColumnIndex(COLUMN_NAME)), csr.getInt(csr.getColumnIndex(COLUMN_CHECKED))> 0) ); } csr.close(); return rv; } public class ContentHistory { private long id; private String name; private boolean checked; ContentHistory(long id, String name, boolean checked) { this.id = id; this.name = name; this.checked = checked; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } } }
public class PerkembanganAdapter extends ArrayAdapter<ContentDao.ContentHistory> { ContentDao contentDao; public ArrayList<ContentDao.ContentHistory> contentHistories; public PerkembanganAdapter(Context context, int id, ArrayList<ContentDao.ContentHistory> contentHistories){ super(context, id, contentHistories); contentDao = new ContentDao(context); this.contentHistories = new ArrayList<>(); this.contentHistories.addAll(contentHistories); /* childDao = new ChildDao(getContext()); childDao.open(); anakYangDipilih = ((Global) context.getApplicationContext()).getChild(); this.idYangSudahBisa = anakYangDipilih.getLevel1(); */ } private class ViewHolder{ TextView title; CheckBox checkBoxes; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null){ LayoutInflater layoutInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = layoutInflater.inflate(R.layout.list_perkembangan, null); viewHolder = new ViewHolder(); viewHolder.title = convertView.findViewById(R.id.TVListPerkembangan); viewHolder.checkBoxes = convertView.findViewById(R.id.CBListPerkembangan); convertView.setTag(viewHolder); viewHolder.checkBoxes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CheckBox checkBox = (CheckBox) v; ContentDao.ContentHistory contentHistory = (ContentDao.ContentHistory) checkBox.getTag(); contentHistory.setChecked(checkBox.isChecked()); contentDao.toggleCheckedById(contentHistory.getId()); //<<<<< will update (toggle) database in real time /* NOT NEEDED if (checkBox.isChecked()){ //idYangSudahBisa = idYangSudahBisa + ","+contentHistory.getId(); //Toast.makeText(v.getContext(), ""+idYangSudahBisa,Toast.LENGTH_SHORT).show(); } else { //idYangSudahBisa = idYangSudahBisa.replace(","+contentHistory.getId(), ""); //Toast.makeText(getContext(), ""+idYangSudahBisa,Toast.LENGTH_SHORT).show(); } */ } }); } else { viewHolder = (ViewHolder) convertView.getTag(); } ContentDao.ContentHistory contentHistory = contentHistories.get(position); viewHolder.title.setText(contentHistory.getName()); viewHolder.checkBoxes.setChecked(contentHistory.isChecked()); viewHolder.checkBoxes.setTag(contentHistory); return convertView; } }
public class PerkembanganLevel1 extends AppCompatActivity{ private ContentDao contentDao; private ListView level1; private PerkembanganAdapter perkembanganAdapter; private ArrayList<ContentDao.ContentHistory> contentHistory; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_perkembangan_level1); level1 = this.findViewById(R.id.level1); contentDao = new ContentDao(this); manageListView(); /*contentDao.open(); childDao = new ChildDao(this); childDao.open(); anakYangDipilih = ((Global) getApplicationContext()).getChild(); idYangSudahBisa = anakYangDipilih.getLevel1(); */ /* ArrayList<ContentDao.ContentHistory> listKataLevel1 = (ArrayList<ContentDao.ContentHistory>) contentDao.getAllWordByLevel(1); perkembanganAdapter = new PerkembanganAdapter(this, R.layout.list_perkembangan, listKataLevel1); //ListView level1 = findViewById(R.id.LVPlv1); level1.setAdapter(perkembanganAdapter); Log.i("listKataLevel1 ", String.valueOf(listKataLevel1)); level1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { contentHistory = (ContentDao.ContentHistory) parent.getItemAtPosition(position); } }); findViewById(R.id.BtnPLv1Submit).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { idYangSudahBisa = perkembanganAdapter.idYangSudahBisa(); anakYangDipilih.getId(); anakYangDipilih.setLevel1(idYangSudahBisa); anakYangDipilih.setCreatedBy(((Global) getApplicationContext()).getTherapist().getId()); anakYangDipilih.setUpdatedBy(((Global) getApplicationContext()).getTherapist().getId()); anakYangDipilih.setCreatedDate(new Date()); anakYangDipilih.setUpdatedDate(new Date()); anakYangDipilih = childDao.saveChild(anakYangDipilih); Toast.makeText(PerkembanganLevel1.this, "Perkembangan Anak pada level 1 Berhasil Diperbarui", Toast.LENGTH_SHORT).show(); } }); */ } /* Will refresh the Listview when returning from an invoked activity just in case data has changed */ @Override protected void onResume() { super.onResume(); manageListView(); } private void manageListView() { contentHistory = contentDao.getContentHistory(); if (perkembanganAdapter == null) { perkembanganAdapter = new PerkembanganAdapter(this,R.layout.list_perkembangan,contentHistory); level1.setAdapter(perkembanganAdapter); } else { perkembanganAdapter.notifyDataSetChanged(); // Not really needed if updating when checked } } }