如何查看特定列表视图项的详细数据

9
假设我有一个国家的城市列表。 如果用户点击其中之一,我希望显示一个新屏幕,显示该列表元素的详细信息。 此外,该屏幕将有其他按钮(例如:撰写评论,发布图片)。
我该如何实现这一点?

你到目前为止尝试了什么?看起来是一个简单的 listview 实现。 - Adinia
我认真思考了一下,我想我会将所选城市对象存储在我的应用程序子类中,当我在点击时启动新的意图时,该活动将使用存储在我的应用程序子类中的数据。 - Cumatru
1个回答

17

City类应该实现Parcelable接口。它的toString()方法应该返回城市的名称(而不仅仅是一个String)。

当您填充ListView时,使用ArrayAdapter<City>而不是ArrayAdapter<String>(此代码假定城市保存在List<City> list中):

City[] cities = new City[list.size()];
list.toArray(cities);
mListView = (ListView) findViewById(R.id.citylist);
mListView.setAdapter(new ArrayAdapter<City>(this,
    R.layout.listitem, cities));

在您的onItemClick处理程序中,获取所选城市并将其作为额外项添加到用于启动详细信息活动的意图上:

mListView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a,
            View v, int position, long id) {
        City city = (City) a.getItemAtPosition(position);
        Intent intent = new Intent(v.getContext(), DetailsActivity.class);
        intent.putExtra("com.example.cities.City", city);
        startActivity(intent);
    }
});

在你的详情活动中,从意图的额外信息中获取城市:

Bundle bundle = getIntent().getExtras();
City city = bundle.getParcelable("com.example.cities.City");

@David,对于详细视图,哪个选项更好?FragmentActivityActivity还是Activity中的fragment - Roon13
@Roon13 抱歉,我不知道。 - David Conrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接