我有一个活动,列表视图显示上一个列表视图的结果。两个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")));
}
任何帮助都会很棒!谢谢你的期待。
答案 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);
}
});