gpt4 book ai didi

android 如何同步 onitemclicklistener listview id 和数据库 id

转载 作者:行者123 更新时间:2023-11-29 11:30:15 24 4
gpt4 key购买 nike

这是 this question 的后继者

一开始一切正常,但删除 2 次后,痛苦就开始了。数据库条目以 ID 1 开始,然后是 2,依此类推。假设我有三个数据库条目。这三个条目的 ListView ID 为 2,1 和 0。数据库条目是 1,2 和 3。1 和 2 将使用 onitemclicklistener 删除,但由于 ListView 没有 ID 3,因此相应的数据库条目永远不会被删除。

所以问题是,如何“同步”这两个 ID?

ListView 类

public class anzeigen extends AppCompatActivity {

private static final String TAG = anlegen.class.getSimpleName();
private static final String FILENAME = TAG + ".kdf";
private List valueList = new ArrayList<String>();
final VorgangDataSource dataSource = new VorgangDataSource(this);


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_anzeigen);

Log.d(TAG,"Die Datenquelle wird geöffnet!");
dataSource.open();

final List<vorgangsdaten> vorgangsdatenList = dataSource.getAllVorgangsDaten();

final ArrayAdapter<vorgangsdaten> VorgangArrayAdapter = new ArrayAdapter<>(
this,
R.layout.mylistlayout,
vorgangsdatenList
);

final ListView lv = (ListView)findViewById(R.id.listView);
lv.setAdapter(VorgangArrayAdapter);
lv.setItemsCanFocus(false);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String s_id = String.valueOf(id);
Log.d(s_id,"id_in_onitem");

String p_id = String.valueOf(position);
Log.d(p_id,"position_on_item");

int pos = position;
vorgangsdatenList.remove(pos);
dataSource.deleteRow(id);
VorgangArrayAdapter.notifyDataSetChanged();
}
});


//ActionBar Costumization
android.support.v7.app.ActionBar ab = getSupportActionBar();
ab.setIcon(R.drawable.search1);
ab.setDisplayShowHomeEnabled(true);
ab.setDisplayUseLogoEnabled(true);
}

@Override
protected void onDestroy() {
super.onDestroy();
dataSource.close();
}
}

deleteRow 方法:

public void deleteRow(long id){

String s_id;
s_id = String.valueOf(id);

Log.d(s_id,"id_value");

database.delete(VorgangDbHelper.TABLE_VORGAENGE_LIST,VorgangDbHelper.COLUMN_ID + " = ?", new String[] {s_id});

long deleteID = database.delete(VorgangDbHelper.TABLE_VORGAENGE_LIST,VorgangDbHelper.COLUMN_ID + " = ?", new String[] {s_id});
String s_del = String.valueOf(deleteID);
Log.d(s_del,"delete_row_value");

}

如果您需要更多代码,请告诉我:)

最佳答案

您的数据库和 ListView 项目之间没有同步性。

选择数据时,从表中选择ID,并将其也保留在内存中。

由于 vorgangsdaten 看起来像德语或瑞典语,我无法理解这些词的含义。 ListView 的每个项目都有自己的“id”,以保持显示的列表,而其余的则“隐藏”。您必须做的是拥有一个对象,其详细信息与数据库同步,并且当单击列表项时,“列表ID”用于查询对象并从数据库中删除。

一个例子是:

ArrayList<MyObject> arrayListData = new ArrayList<>();
ArrayList<String> arrayListNames = new ArrayList<>();
MyObject stuffs = database.query(); // In here, fetch the data
/* I am simplifing the MyObject to [String name, String aValue, int aNumber] */
for(MyObject s: stuffs){
arrayListData.add(s);
arrayListNames.add(s.name);
}
arrayAdapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_list_item_1,
arrayListNames
);

listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MyObject thing = arrayListData.get(position);
database.delete(thing.aNumber);
}
}
);
listView.setAdapter(arrayAdapter);

关于android 如何同步 onitemclicklistener listview id 和数据库 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37532511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com