使用rawQuery从listview传递_id并在新活动中填充选择的详细信息(Android)

时间:2012-03-03 16:41:32

标签: android sqlite listview

我有一个活动,列表视图显示上一个列表视图的结果。两个listview活动是:

城市列表。 该城市内的街道列表。

当我在ListView上选择街道时,我想要填充另一个活动,其中包含存储在我的数据库中的街道的某些细节(例如,餐馆或兴趣点)。

我正试图通过我点击的街道的_id并在我的新活动中获取它(就像我对City to Street活动所做的那样),但我无法返回任何结果。以下是我的代码。我非常感谢你帮助我解决这个问题。

以下是我的代码,用于获取点击特定街道的信息。为了简单起见,我只是想再次显示一个ID和名称,只是为了从行中填充一些东西:

    @Override
    protected void onListItemClick(ListView parent, View view, int position, long id) {
        //super.onListItemClick(parent, view, position, id);
        Intent intent = new Intent(this, Street_Details.class);
        Cursor cursor = (Cursor)adapter.getItem(position);
        intent.putExtra("Street_ID", cursor.getInt(cursor.getColumnIndex("_id")));

        startActivity(intent);


    }

这是我的新活动中的代码,用于显示该街道的一些细节:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.peak_details);

   Intent i = getIntent(); 
   streetId = getIntent().getIntExtra("Street_ID", 0);
   db.openDataBase();

   Cursor cursor = myDataBase.rawQuery("SELECT _id as _id, City_id, Street FROM Streets WHERE _id = '" +streetId+"'", null);

    if (cursor.getCount() == 1)
    {
        cursor.moveToFirst();

        elevation = (TextView) findViewById(R.id.elevation);
        elevation.setText(cursor.getString(cursor.getColumnIndex("Street_Id)));

        elevation1 = (TextView) findViewById(R.id.elevation1);
        elevation1.setText(cursor.getString(cursor.getColumnIndex("Street")));
    }

任何帮助都会很棒!谢谢你的期待。

2 个答案:

答案 0 :(得分:1)

这令人困惑。您是否尝试在一个ListView中显示城市的街道?那会很混乱。据我所知,你是用一个包含游标数组的适配器来做的,我不确定它会起作用。

无论如何,onListItemClicked()的参数指向支持数据中的项目不是位置而是 id 。 Position是ListView中列表项的索引; id是Cursor中的行的_ID值(对于游标适配器)或者是数据项的索引 数据。它们可以是不同的。

接下来,您将街道ID作为游标中_id值的列索引?这对我来说毫无意义。在下一个活动中,您不会选择街道ID,您将选择光标中街道ID 的索引。

我需要更多关于您的数据库组织,以便为您提供进一步的指导。但是,如果我实施这个,我会在一个活动和街道中显示城市。

答案 1 :(得分:0)

一个。 Elk指出了活动组织的不止一个问题,但其中一个问题很容易解决:根据游标id查找记录id(数据库中'_id'列中包含的值)。我是这样做的:

getListView().setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        c.moveToPosition(position);
        String recId = c.getString(0);
        Intent intent = new Intent(view.getContext(), DisplayRecordActivity.class);
        intent.putExtra(RECORD_ID, recId);
        startActivity(intent);
    }
});