【问题标题】:How to Get the SQLite column _id value for the list item clicked in listview如何获取列表视图中单击的列表项的 SQLite 列 _id 值
【发布时间】:2014-06-17 07:18:21
【问题描述】:

我有一个显示列表的活动。该列表是根据从 sqlite 数据库中获取的数据填充的。我正在使用一个简单的CursorAdapter。单击列表中的项目时,我想转到另一个活动页面以显示有关单击的列表项目的更多详细信息。为此,我需要数据库中给出的单击列表项的 _id(主键),以便我可以使用该 id 查询数据库并在用户单击列表项时加载的下一个活动中显示更多详细信息。通过使用onItemClickListener,怎么做???我很感激任何建议。提前致谢!

【问题讨论】:

  • 将该 id 设置为列表项的 ID。所以当listitem点击时获取该项目的ID。

标签: android sqlite listview android-intent onitemclicklistener


【解决方案1】:

将_id(主键)设置为列表项的ID:数据适配器

适配器:

@Override
public long getItemId(int position) {
    return position;//you can return your ID
}

活动:

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //id == getItemId(int position);
        }
    });

也可以:

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //listView.getAdapter().getItem(position) -> getId;
        }
    });

【讨论】:

    【解决方案2】:

    您可以将带有意图的 Id 传递给下一个活动:

              Intent intent = new Intent(this, your_next_activity.class);
                intent.putExtra("ID", id);
                startActivity(intent);
    

    然后在下一个活动中获取值(编辑):

             Intent intent = getIntent();
             int id= intent.getIntExtra("ID", 0);
    

    然后你有了ID,你就可以查询数据库了:

            Cursor c = yourDBHelper.getAllDetailsMethod(); //method inside Your db-helper that gives You the cursor
            int rows = c.getCount();
            c.moveToFirst();
    
            for(int i=0;i<rows;i++){
    
                int db_id = c.getInt(0) //this belongs to the place where Your id is inside the db
    
               if(db_id==id){
                   //here You can get all details you need
    
                 break;//stop quering
               }else{
    
                  c.moveToNext();
                }
    
            }
    

    但要给你一个好的解决方案,你最好向我们展示你到目前为止所做的事情。

    【讨论】:

    • 当我尝试使用 Log("IDGot",id) 消息在下一个活动中查看 id 的值时,使用此方法显示为 0。这是为什么?在上一个活动中为 id 设置的值是 4。我通过一条日志消息看到了这一点。为什么下一个activity中没有显示id值?
    • 我已经更改了捕获值方法。尝试使用 Intent intent = getInten(); int id = intent.getIntExtra("ID",0);如果什么都不能通过,则 0 是默认值。有时我遇到了像你描述的同样的问题,不知道为什么。但有了这个版本,我总能得到价值。
    猜你喜欢
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多