您的位置:首页 > 其它

Listview的简单应用

2016-02-01 16:44 246 查看
刚学习安卓不久 对于listview的使用还不是很熟练 所以写一下 加深印象防止自己忘了  

在listview中 如果想要在加载页面加载 checkbox  textview  imageview  button  其实并不难 但是点击事件会发生冲突  解决方法之一是(红色代码)

1,在最外层的布局上 加上

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="160dp"

    android:padding="5dp"

    android:descendantFocusability="blocksDescendants"

    android:orientation="horizontal" >

2,在checkbox的xml布局里加上

<CheckBox 

        android:id="@+id/shop_checkbox_select"

        android:layout_width="30dp"

        android:layout_height="match_parent"

        android:layout_gravity="center"

android:onClick="click"

        android:focusable="false"

        android:focusableInTouchMode="false"

        />

3,在button上加上

<Button 

                    android:id="@+id/shopcar_button_sub"

                    android:layout_width="35dp"

                    android:layout_height="35dp"

                    android:text="-"

                    android:focusable="false"

                    android:background="@drawable/bg_border"

                    android:layout_below="@+id/shopcar_goumai_num"

                    android:layout_marginTop="3dp"

                    />

这样在listview的界面里 点击按钮 复选框 和listview的item就不会有冲突了 还是比较简单的 

还有一个问题就是在listview中 如何点击按钮进行传值的问题  因为正常情况下listview的的item有position位置信息 如果不做任何处理的话 手机不知道你点击的是哪一个item  所以这个问题 也是困扰了我 

在自定义的适配器中(没有单独写成一个类,直接在fragment中写的) 做如下操作便可的得到position 这样就可以进行随性所欲的操作了 哈哈   主要是重新自己定义监听事件 然后让事件把position传进去 再进行取值 这样就可以得到position了 

//删除该item这行

public void removeItem(int position){
       list.remove(position);
       this.notifyDataSetChanged();
   }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

if (convertView==null) {
vHolderShop=new ViewHolderShop();
convertView=LayoutInflater.from(getActivity()).inflate(R.layout.shopcar_item, null);
vHolderShop.boxSelect= (CheckBox) convertView.findViewById(R.id.shop_checkbox_select);
vHolderShop.icon=(ImageView) convertView.findViewById(R.id.shopcar_item_image_shop);
vHolderShop.title=(TextView) convertView.findViewById(R.id.shopcar_title);
vHolderShop.buyPeo=(TextView) convertView.findViewById(R.id.shopcar_goumai_num);
vHolderShop.shengPeo=(TextView) convertView.findViewById(R.id.shopcar_shengyu_num);
vHolderShop.num=(TextView) convertView.findViewById(R.id.shopcar_buy_num);
vHolderShop.sub=(Button) convertView.findViewById(R.id.shopcar_button_sub);
vHolderShop.add=(Button) convertView.findViewById(R.id.shopcar_button_add);
vHolderShop.delect=(Button) convertView.findViewById(R.id.shopcar_item_bt_delect);
vHolderShop.money_10=(Button) convertView.findViewById(R.id.button_money_10);
vHolderShop.money_50=(Button) convertView.findViewById(R.id.button_money_50);
vHolderShop.money_100=(Button) convertView.findViewById(R.id.button_money_100);
convertView.setTag(vHolderShop);
}else {
vHolderShop=(ViewHolderShop) convertView.getTag();
}
vHolderShop.icon.setBackgroundResource(R.drawable.no_data);
vHolderShop.title.setText(list.get(position).getTitle());
vHolderShop.buyPeo.setText(list.get(position).getBuyNum());
vHolderShop.shengPeo.setText(list.get(position).getShNum());
vHolderShop.sub.setText("-");
vHolderShop.add.setText("+");
vHolderShop.delect.setText("删除");
vHolderShop.money_10.setText("10");
vHolderShop.money_50.setText("50");
vHolderShop.money_100.setText("100");
vHolderShop.num.setText(number+"");
money_zb=number*100;
zongji.setText("总计:"+money_zb+"真币="+number+"元人民币");
/**
* 各种点击事件
*/
vHolderShop.boxSelect.setOnCheckedChangeListener(new MyChangeListener(position));

vHolderShop.sub.setOnClickListener(new DelectListener(position));

vHolderShop.add.setOnClickListener(new DelectListener(position));

vHolderShop.delect.setOnClickListener(new DelectListener(position));

vHolderShop.money_10.setOnClickListener(new DelectListener(position));

vHolderShop.money_50.setOnClickListener(new DelectListener(position));

vHolderShop.money_100.setOnClickListener(new DelectListener(position));

return convertView;
}

class DelectListener implements OnClickListener{
int position;
public DelectListener(int pos) {
// TODO Auto-generated constructor stub
position=pos;
}

@Override
public void onClick(View v) {
int vid=v.getId();
if (vid==vHolderShop.delect.getId()) {
removeItem(position);
}
else if (vid==vHolderShop.add.getId()) {
number++;
vHolderShop.num.setText(number+"");
money_zb=number*100;
zongji.setText("总计:"+money_zb+"真币="+number+"元人民币");

}}}

复选框的一些操作 当被选中是 商品数+1 取消时-1

class MyChangeListener implements OnCheckedChangeListener{
private int position;
public MyChangeListener(int pos){
// TODO Auto-generated constructor stub
position=pos;
}

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
shopNum ++;
gongji.setText("共计:"+shopNum+"件商品");
}else {
if (shopNum>0) {
shopNum --;
gongji.setText("共计:"+shopNum+"件商品");
}else {
shopNum=0;
gongji.setText("共计:"+shopNum+"件商品");
}

}
}

}

 写的比较乱  提醒自己 下次可以写的更好!  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: