我有一個SQLite數據庫和ListView
顯示在主要活動。在ListView
中,我顯示每個清單編號的詳細信息,並在按下清單項時打開一個新活動,其中顯示TextView
中的詳細信息。SQLite行ID與ListView行ID不匹配
我有這些ListView
s中的每一個的刪除功能,它們不能正常工作。實質上,每個創建的ListView
都有一個唯一的ID,SQLite數據庫應該如何工作。但是,在刪除ListView
中的一行時,唯一標識會增加,但行標識將刪除該數字並將所有內容向上移動。這意味着在您刪除一個項目後,行ID和數據庫ID不再匹配,當嘗試選擇ListView
中的項目時,它會崩潰。這是我的數據庫適配器類的摘錄:
public Integer deleteStat(Integer id) {
SQLiteDatabase db = this.getWritableDatabase();
return db.delete(STATS_TABLE, "id = ? ", new String[]{Integer.toString(id)});
}
這是我第一次嘗試主要活動。我得到了一些信息,從this後但未能獲得正確的整數並收到語法錯誤:
obj.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
TextView pos = (TextView) findViewById(R.id.editTitle);
displayText(Integer.parseInt(pos.getText().toString()));
}
});
}
public void displayText(int pos)
{
pos++;
String s = "";
s += pos;
Intent intent = new Intent(getApplicationContext(), DisplayStatsActivity.class);
intent.putExtra("id", s);
startActivity(intent);
}
這是我的主要活動的第二次嘗試。我用this教程來幫助我。我從該網站使用的代碼破壞了整個刪除功能:
obj.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
int id_To_Search = arg2 + 1;
int id_To_Search = arg0.getCount() - arg2;
Bundle dataBundle = new Bundle();
dataBundle.putInt("id", id_To_Search);
Intent intent = new Intent(getApplicationContext(), DisplayStatsActivity.class);
intent.putExtras(dataBundle);
startActivity(intent);
如何獲取數據庫ID以匹配行ID?有關如何做到這一點的任何建議?
編輯:添加在哈希圖代碼。當我按一個ListView項目,什麼都不會發生
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mydb = new StatisticsDbAdapter(this);
ArrayList array_list = mydb.getAllStats();
ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array_list);
obj = (ListView) findViewById(R.id.listView1);
obj.setAdapter(arrayAdapter);
/*
New code starts here
*/
Bundle extras = getIntent().getExtras();
if (extras != null) {
int Value = extras.getInt("id");
if (Value > 0) {
//means this is the view part not the add contact part
Cursor cursor = mydb.getData(Value);
hashMap.put(cursor.getString(1), cursor.getInt(0));
obj.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int arg2, long arg3) {
TextView textView = (TextView) view.findViewById(R.id.editTitle);
Bundle dataBundle = new Bundle();
dataBundle.putInt("id", hashMap.get(textView.getText().toString()));
Intent intent = new Intent(getApplicationContext(), DisplayStatsActivity.class);
intent.putExtras(dataBundle);
startActivity(intent);
}
});
}
}
}
'SQLite行ID不匹配ListView'這很明顯。想象一下你的ID以953開頭(因爲你做了很多試驗並且刪除了所有的測試記錄)。你是否假裝你的ListView從項目編號953開始?不,顯然不是。它將開始填充ITS項目編號爲0的項目。 – 2016-06-13 18:52:24
那麼,如何在確保數據庫ID在從列表視圖中刪除行之後確保數據庫ID保持與行ID一致?當我嘗試點擊它們回調它們時? –
谷歌關鍵字:'android listview database delete' – 2016-06-13 20:52:03