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