Android Listview:显示项目详细信息onItemClic

时间:2013-04-20 19:13:33

标签: android android-intent listviewitem onitemclicklistener

我已经在电子商务应用程序上工作了一段时间,现在我有一个ListView显示产品列表 - 每个产品= 1个ImageView和一些TextViews - 。

我在ListView上设置了onItemClick侦听器,当我点击其中一个listView产品时,我想要发生的事件是,启动我的新活动,'ProductDetails'显示我点击的产品的更多信息

我已经在其他地方问了这个问题,但我没有得到明确的答案, 他们说我必须创建一个新的'list \ details'项目,但现在这不可能发生,因为我已经在这个项目上工作了20天,并且不能重新开始。

4 个答案:

答案 0 :(得分:1)

您无法从TextViewImageView发送ActivityActivity。你可以发送的是它的内容。例如,如果您想传递TextView中的信息,则需要传递其中显示的来源String(或者从String中提取TextView)你可以通过将Bundle从调用的Activity传递到被调用者,或者只是将其作为Extra

来实现。
intent.putExtra("string name", value);

并在以下Activity中获得此数据:

Intent intent = getIntent();
bundle = intent.getExtras();
bundle.getString("string name");

然后在以下Activity中使用传递的TextView创建String。 通过传递它的路径,ImageView处理相同的方式。

答案 1 :(得分:1)

抱歉,我发布了一个答案,但只是指向另一个网站的链接,因此被删除了: - (

我再次提出可能的解决方案:

在您的第一项活动中,您需要使用intent.putExtra(...)并使用intent.getExtra(...)检索第二项活动中的数据。

示例活动1:

i.putExtra("title01", yourDataCollection.get(position).get(KEY_TITLE01));

活动2:

this.title01 = i.getStringExtra("title01");

这里有一个完整的项目:http://www.codeproject.com/Articles/507651/Customized-Android-ListView-with-Image-and-Text

答案 2 :(得分:1)

Android使用意图允许Activity进行交互。如果您想要显示产品的详细信息,可能您有一个描述该产品的Class及其所包含的信息,请填写ListView。如果您允许class Product implements Serializable使用Intent.putExtra(String name, Serializable obj),则可以在Activity之间传递产品说明。在ProductDetailsActivity中,您可以使用:

getIntent(). getSerializableExtra (String name)

检索您在创建的Intent中放置的序列化以启动ProductDetailsActivity

答案 3 :(得分:1)

如果使用Intent多次传递模型类,也许它可以实现Parcelable接口以方便使用。例如:

    class ProductData implements Parcelable {
        protected String name;
        protected String someOtherData;

        public static final Parcelable.Creator<ProductData> CREATOR = new Parcelable.Creator<ProductData>() {

            @Override
            public ProductData createFromParcel(Parcel source) {
                return new ProductData(source);
            }

            @Override
            public ProductData[] newArray(int size) {
                return new ProductData[size];
            }
         };

        public ProductData(){
        }

        public ProductData(Parcel source){
            readFromParcel(source);
        }

        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(name);
            dest.writeString(someOtherData);
        }

        public void readFromParcel(Parcel source){
            name = source.readString();
            someOtherData = source.readString();
        }

        // Here goes the rest of your model code
    }

然后,您可以使用Activity

轻松地将对象传递给另一个Intent
intent.putExtra("product", productData);

然后使用

获取数据
ProductData productData = intent.getParcelableExtra("product");