Java Android studio listview更改项
有人能帮我更改listview中项目的名称吗?我不知道怎么做。我正在使用SQLite数据库,这是我的更新名称:Java Android studio listview更改项,java,android,sqlite,Java,Android,Sqlite,有人能帮我更改listview中项目的名称吗?我不知道怎么做。我正在使用SQLite数据库,这是我的更新名称: public void doneName(String finishedName,int id, String oldName) { SQLiteDatabase db = this.getWritableDatabase(); String query = "UPDATE " + TABLE_NAME + " SET " + COL2 + "
public void doneName(String finishedName,int id, String oldName)
{
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE " + TABLE_NAME + " SET " + COL2 + " = '" + finishedName + "' WHERE " + COL1 +
" = '" + id + "'" + " AND " + COL2 + " = '" + oldName + "'";
db.execSQL(query );
}
在此之后,在我的活动中,我将McClickListener设置为应该更改名称的位置,但不更改名称,它只显示toast:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String name = parent.getItemAtPosition(position).toString();
Cursor cursor =th.getItemID(name);
int itemID = -1;
while(cursor.moveToNext())
{
itemID = cursor.getInt(0);
}
if(itemID>-1) {
String item = "Done";
th.doneName(item, selectedID, selectedName);
Toast.makeText(HomePageActivity.this, "You have accomplished this task!", Toast.LENGTH_SHORT).show();
}}
});
@覆盖
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串名称=parent.getItemAtPosition(position).toString();
Cursor Cursor=th.getItemID(名称);
int itemID=-1;
while(cursor.moveToNext())
{
itemID=cursor.getInt(0);
}
如果(项目ID>-1){
String item=“完成”;
th.doneName(项目,selectedID,selectedName);
Toast.makeText(HomePageActivity.this,“您已经完成了此任务!”,Toast.LENGTH\u SHORT.show();
}}
});
恐怕您没有更新相关适配器项的实例。
如果此ListView适配器附带了字符串列表,则应使用要显示的名称在相关位置初始化字符串项。然后调用Adapter.notifyDataSetChanged以使用更新的列表刷新ListView中的所有UI元素
看起来,您从未更新适配器列表中的字符串实例是双重的
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DBNAME = "mydb";
public static final int DBVERSION = 1;
public static final String TABLE_NAME = "mytable";
/*<<<<<<<<<< id column must be _id (BaseColumns._ID) for Cursor Adapters >>>>>>>>>*/
public static final String COLID = BaseColumns._ID;
public static final String COL1 = "mycol1";
public static final String COL2 = "mycol2";
public DatabaseHelper(@Nullable Context context) {
super(context, DBNAME, null, DBVERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_NAME + "(" +
COLID + " INTEGER PRIMARY KEY, " +
COL1 + " TEXT, " +
COL2 + " TEXT " +
")"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public long insert(String col1, String col2) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL1,col1);
cv.put(COL2,col2);
return db.insert(TABLE_NAME,null,cv);
}
public int doneName(String finishedName,int id, String oldName) {
/*
Alternative using the update convenience method
Based upon :-
String query = "UPDATE " + TABLE_NAME + " SET " + COL2 + " = '" + finishedName + "' WHERE " + COL1 +
" = '" + id + "'" + " AND " + COL2 + " = '" + oldName + "'";
writes the SQL for you.
protects against SQL Injection
returns the number of rows updated
*/
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL2,finishedName);
return db.update(TABLE_NAME,cv,COLID + "=? AND " + COL2 + "=?",new String[]{String.valueOf(id),oldName});
}
public Cursor getAll() {
SQLiteDatabase db = this.getWritableDatabase();
return db.query(TABLE_NAME,null,null,null,null,null,null);
}
}
public类DatabaseHelper扩展了SQLiteOpenHelper{
公共静态最终字符串DBNAME=“mydb”;
公共静态最终int DBVERSION=1;
公共静态最终字符串表\u NAME=“mytable”;
/**/
公共静态最终字符串COLID=BaseColumns.\u ID;
公共静态最终字符串COL1=“mycl1”;
公共静态最终字符串COL2=“mycl2”;
公共DatabaseHelper(@Nullable上下文){
super(上下文,DBNAME,null,DBVERSION);
}
@凌驾
public void onCreate(SQLiteDatabase db){
db.execSQL(“如果不存在则创建表”+表名称+”(“+
COLID+“整数主键,”+
COL1+“文本,”+
COL2+“文本”+
")"
);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
}
公共长插入(字符串col1、字符串col2){
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=新的ContentValues();
cv.put(COL1,COL1);
cv.put(COL2,COL2);
返回db.insert(表名称,null,cv);
}
public int doneName(字符串finishedName、int id、字符串oldName){
/*
使用更新便利方法的替代方案
基于:-
String query=“UPDATE”+表名+“SET”+COL2+“='”+finishedName+“'其中”+COL1+
“='”+id+“+”和“+COL2+”='“+oldName+””;
为您编写SQL。
防止SQL注入
返回更新的行数
*/
SQLiteDatabase db=this.getWritableDatabase();
ContentValues cv=新的ContentValues();
cv.put(COL2,完成名称);
返回db.update(TABLE_NAME,cv,COLID+“=”和“+COL2+”=?”,新字符串[]{String.valueOf(id),oldName});
}
公共游标getAll(){
SQLiteDatabase db=this.getWritableDatabase();
返回db.query(表名称,null,null,null,null,null,null);
}
}
- 三个自定义方法insert(插入一行)、getAll(返回包含所有行的游标)和您的doneName方法(重写以利用更新便利方法)
- 您可能会注意到,没有任何方法将提取的数据转换为对象的列表/数组列表/数组。这是因为在使用游标适配器时不需要
public class MainActivity extends AppCompatActivity {
ListView mListView;
DatabaseHelper th;
Cursor csr;
SimpleCursorAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = this.findViewById(R.id.listview);
th = new DatabaseHelper(this);
addSomeTestData();
manageAdapter();
}
@Override
protected void onDestroy() {
super.onDestroy();
csr.close(); //<<<<<<<<<< Should always close Cursors when done with them
}
private void manageAdapter() {
/* This handles but the initialisation and the refreshing of the Listview */
/* First time it is called it initialises the Adapter and Listview */
/* On subsequent calls it refreshes the ListView */
csr = th.getAll();
if (adapter == null) {
adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_expandable_list_item_2,csr,
new String[]{
DatabaseHelper.COL1,
DatabaseHelper.COL2
},
new int[]{
android.R.id.text1,
android.R.id.text2},
0
);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (th.doneName(
/* reverses string to test multiple updates of the same row */
new StringBuilder(csr.getString(csr.getColumnIndex(DatabaseHelper.COL2))).reverse().toString()
/* "Done" */,
(int )id /* NOTE ID IS PASSED to onItemClick FOR CURSOR ADAPTER */,
csr.getString(csr.getColumnIndex(DatabaseHelper.COL2)) /* NOTE Oldname isn't required as ID will identify the row */
) > 0) {
manageAdapter(); //<<<<<<<<< after updating refresh the Cursor and the ListView
Toast.makeText(view.getContext(),"Updated OK.",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(view.getContext(),"Not Updated!!!",Toast.LENGTH_SHORT).show();
}
}
});
} else {
adapter.swapCursor(csr);
}
}
private void addSomeTestData() {
//Add some data but only if none exists
if (DatabaseUtils.queryNumEntries(th.getWritableDatabase(),DatabaseHelper.TABLE_NAME) > 0) return;
th.insert("TEST1 COL1","TEST1 COL2");
th.insert("TEST2 COL1","TEST2 COL2");
th.insert("TEST3 COL1","TEST3 COL2");
th.insert("TEST4 COL1","TEST4 COL2");
th.insert("TEST5 COL1","TEST5 COL2");
}
}
public类MainActivity扩展了AppCompatActivity{
列表视图;
数据库;
光标csr;
SimpleCursorAdapter适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=this.findviewbyd(R.id.listview);
th=新数据库助手(此);
addSomeTestData();
manageAdapter();
}
@凌驾
受保护的