如何不按位置而是按表sqlite中的_id切换到新Activity
Posted
技术标签:
【中文标题】如何不按位置而是按表sqlite中的_id切换到新Activity【英文标题】:How to switch to a new Activity not by position, but by _id in the table sqlite 【发布时间】:2020-02-05 14:13:32 【问题描述】:你好。有一个表格,其中的数据按位置显示在 ListView 中。一切都很好。但是如果表中有空格,那么这就会成为一个问题。如何通过表格中的 _id 而不是位置切换到所需的活动? 我寻求帮助,我将不胜感激。 非常感谢大家! 以下是我的代码:
这是我的代码 MainActivity.java
this.listView = findViewById(R.id.listView);
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
databaseAccess.open();
List<String> quotes = databaseAccess.getQuotes();
databaseAccess.close();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, quotes);
this.listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
if(id==0)
Intent myintent = new
Intent(view.getContext(),MosObl.class);
startActivityForResult(myintent,0);
if(id==1)
Intent myintent = new
Intent(view.getContext(),Arhangelsk.class);
startActivityForResult(myintent,1);
if(id==2)
Intent myintent = new
Intent(view.getContext(),Astrahan.class);
startActivityForResult(myintent,2);
这是我的代码 DatabasesAccess.java
public List<String> getQuotes()
List<String> list = new ArrayList<>();
Cursor cursor = database.rawQuery("SELECT * FROM regiones where izbrannoe = 1", null);
cursor.moveToFirst();
while (!cursor.isAfterLast())
list.add(cursor.getString(0));
cursor.moveToNext();
cursor.close();
return list;
【问题讨论】:
欢迎您!你的代码在哪里? 【参考方案1】:有了被点击项目的位置(这是你唯一能直接得到的东西),你可以从你的“报价”列表中得到报价,使用:
final String desiredQuote = quotes.get(position);
然后,向您的数据库发出请求,您将能够获得所需的 ID。比如:
final Cursor cursor = database.rawQuery("SELECT _id FROM regiones where izbrannoe = 1 AND quote=?",new String [] desiredQuote);
这就是你要找的吗?
【讨论】:
非常感谢您的快速回复。我是编程新手,我仍然什么也得不到。你能用代码元素更详细地解释如何做到这一点吗?抱歉冒昧。 在您的onItemClick
方法中,每次单击列表中的项目时都会调用该方法,您有position
orgument,它是被单击项目在ListView 中的位置。有了这个位置,您可以从list
ArrayList 中获取字符串。它应该在相同的位置。然后你只需要查询你的数据库来得到_id
对应你数据库中这个字符串,假设你数据库中的每个字符串都是唯一的。
非常感谢,好主意。你能帮我写代码吗,因为我的脑袋已经不灵了,什么都不起作用。我真的很感激。
这可能很困难,因为我不知道您的数据库或您的应用程序...:/
非常感谢。我会试试的。以上是关于如何不按位置而是按表sqlite中的_id切换到新Activity的主要内容,如果未能解决你的问题,请参考以下文章
android.database.sqlite.SQLiteException: no such column: id (code 1 SQLITE_ERROR): , 同时从旧版本的 db 编译到新