Android listView中点击item或Item中控件跳转对应的详情页面的实现(商品详情查看)

应用场景

开发中,特别是电商客户端,用ListView展示商品列表,点击Item 或是Item中的控件会跳转到对应的商品详情,本文主要讲Intent传递数据,实现简单的商品详情展示,实际的开发中是采用传递商品的Id然后在界面加载对应的Json数据并且显示,原理一致。页面效果图如下:

这是商品列表
Android listView中点击item或Item中控件跳转对应的详情页面的实现(商品详情查看)_第1张图片
这是商品详情
Android listView中点击item或Item中控件跳转对应的详情页面的实现(商品详情查看)_第2张图片

本文是在适配器里给Button或是其他控件设置点击事件在getView中只复用了ChildView的布局,这样做是解决滑动时候ListViewPosition位置错乱的问题,注意:final int position,final FrameLayout fl = (FrameLayout) convertView.findViewById(R.id.fl);这样可以实现Item控件的点击事件比较友好。就是在开启Activity的时候通过Intent传递需要的参数给Activity。

@Override
        public View getView(final int position, View convertView, ViewGroup parent) {

            ViewHolder holder = null;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_produces, null);//填充布局
                }else {
                holder = (ViewHolder) convertView.getTag();
            }
holder = new ViewHolder();
holder.iv_produce = (ImageView) convertView.findViewById(R.id.iv_produce);
holder.tv_pro_all = (TextView) convertView.findViewById(R.id.tv_pro_all);

点击事件
final FrameLayout fl = (FrameLayout) convertView.findViewById(R.id.fl);
            fl.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    //需要Intent传递参数
                    Intent produceinfo = new Intent(getActivity(), JuJiangProduceInfoActivity.class);
                    Bundle b = new Bundle();
                    b.putInt("position", (Integer)position);
                    b.putInt("img", (Integer) mData.get(position)
                            .get("img"));
                    b.putString("name",
                            (String) mData.get(position).get("info"));
                    produceinfo.putExtras(b);
                    startActivity(produceinfo);


                }
            });

进入商品详情代码分析

通过Bundle添加数据,由于Bundle啥数据都能存,这个比较友好,直接将数据装进bundle 然后扔给intent传递即可。

Bundle b = new Bundle();
b.putInt("position", (Integer)position);
b.putInt("img", (Integer) mData.get(position)
                            .get("img"));
扔给Intent数据
Intent produceinfo = new Intent(getActivity(), xxxActivity.class);
produceinfo.putExtras(b);——>这里才是扔进去了
startActivity(produceinfo);

在xxxActivity中只要获得Intent传递过来的数据设置在对应的控件上即可。(实际开发中只传递商品的Id即可,通过id获得Json,填充数据)代码如下

//得到传递过来的intent参数
        Bundle b = getIntent().getExtras();
        String name = b.getString("name");//商品名
        int ing = b.getInt("img");//图片
        --->以下设置数据给对应的控件即可。
        iv_pd_info.setBackgroundResource(ing);
        tv_pro_name.setText(name);

总结

当我们初次接触ListView这种跳转到相同界面,但是数据不一样,我们通常采用数据获取通过Position获取对应位置的数据,通过Intent传递对应position 的数据给对应的页面,这样Android“详情”页面就完成了。

你可能感兴趣的:(ListView)