Android ListView的应用(如何去实现ListView控件(自定义适配器))

稀稀拉拉学了有快1年的Android了,但是依然跟刚入门的小白一样,用到啥学啥,上网查别人的代码,然后复制粘贴过去,最后什么都没学到,现在是深有体会,我希望记录一些知识点,踏踏实实的走好每一步,希望刚入门的小白能用到。

首先Android Studio中有许多系统自带的空间,比较常见是TextView,EditView,ImageView,Button,ImageButton,

等等许多的空间,现在我来介绍一种常用的空间——————ListView———————

ListView  就是把展示的东西一条条展示出来  例如这样:虽然比较丑 但是起码实现了ListView

                                                               Android ListView的应用(如何去实现ListView控件(自定义适配器))_第1张图片

接下来我来一步步介绍一下,并且附上源码,如何写一个比较好的ListView:

1.内布局(我自己这样叫)shopfacelist.xml文件

就是白色区域内的布局,白色区域中的布局自己去写,写成什么样的布局,就会展示什么样的布局



    
        
        

            

            
        

      
          

          

      
    



2.ListView    fragment_perfood.xml文件

在b.xml文件中,我们会安放ListView控件并且设置ID



    
    
    
    


3.数据源类  CartResource.java

如果自定义的话,那么你就必须要有数据源,每个ListView的Item(子项),就是图片中的白框,内容基本都是不一样的,图片中的Item的内容是因为在初始化的时候每个Item的数据利用循环就变的一模一样了。

public class CartResource {
    private String onlyFlag;       //给每个商品加入唯一标识码
    private int imageId;        //图片ID
    private String foodName;    //食物名称
    private String foodPrice;   //食物价格
    private String monthSoleCount;  //月售的数量
    private String  buttonId;       //删除

    public CartResource(String onlyFlag,int imageId, String foodName, String foodPrice, String monthSoleCount, String  buttonId) {
        this.onlyFlag = onlyFlag;
        this.imageId = imageId;
        this.foodName = foodName;
        this.foodPrice = foodPrice;
        this.monthSoleCount = monthSoleCount;
        this.buttonId = buttonId;
    }

    public String getOnlyFlag() {
        return onlyFlag;
    }

    public void setOnlyFlag(String onlyFlag) {
        this.onlyFlag = onlyFlag;
    }

    public int getImageId() {return imageId;}

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getFoodName() {
        return foodName;
    }

    public void setFoodName(String foodName) {
        this.foodName = foodName;
    }

    public String getFoodPrice() {
        return foodPrice;
    }

    public void setFoodPrice(String foodPrice) {
        this.foodPrice = foodPrice;
    }

    public String getMonthSoleCount() {
        return monthSoleCount;
    }

    public void setMonthSoleCount(String monthSoleCount) {
        this.monthSoleCount = monthSoleCount;
    }

    public String getButtonId() {
        return buttonId;
    }

    public void setButtonId(String  buttonId) {
        this.buttonId = buttonId;
    }
}

4.适配器 CartAdapter.java

自定义适配器来适配数据源

public class CartAdapter extends ArrayAdapter{
    private int resourceId;

    public CartAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List objects) {
        super(context, resource, objects);
        resourceId = resource;
    }

    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull final ViewGroup parent) {
        CartResource s = getItem(position);
        View view;
        if(convertView == null){
            view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
        }else {
            view = convertView;
        }

        /**
         * 删除菜品
         */
        ImageView imageId  = (ImageView) view.findViewById(R.id.food_Image);
        TextView foodName  = (TextView)view.findViewById(R.id.food_Name);
        TextView foodPricce = (TextView)view.findViewById(R.id.food_Price);
        TextView delete = (TextView) view.findViewById(R.id.delete_food);
        TextView monthSoleOut = (TextView)view.findViewById(R.id.show_Sole_Count);

        imageId.setImageResource(s.getImageId());
        foodName.setText(s.getFoodName());
        foodPricce.setText(s.getFoodPrice());
        /**
         * 删除菜品是点击事件
         */
        delete.setText(s.getButtonId());
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String onlyflag = getItem(position).getOnlyFlag();   //商品编号
                remove(getItem(position));
                Toast.makeText(parent.getContext(),"删除了编号为"+onlyflag+"的菜品", Toast.LENGTH_SHORT).show();
        }
        });
        delete.setText(s.getButtonId());
        monthSoleOut.setText(s.getMonthSoleCount());
        return view;
    }

}

5.活动  Fragment_perFood.java

在活动中初始化数据源,绑定适配器。

public class Fragment_perFood extends Fragment {
    private List mList;
    public CartResource reInit;
    private CartAdapter ReAdapter;
    private ListView listView;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_perfood,null);

        /**
         * 绑定数据源
         */
        mList = new ArrayList();
        //初始化适配器
        Init();
        //必须刷新才能是添加的东西展示出来
        ReAdapter = new CartAdapter(getActivity(),R.layout.shopfacelist_1,mList);
        listView = (ListView)view.findViewById(R.id.listView_perSomething);
        listView.setAdapter(ReAdapter);
        return view;
    }
    /*
    * 当前的数据
    */
    public void Init(){
        for(int i = 0 ;i<50 ; i++){
            reInit = new CartResource(12306+i+"",R.mipmap.image_7,"鱼香茄子","8¥","月售3666份","删除");
            mList.add(reInit);
        }
    }
}

记录一下,方便自己以后用到,也方便刚入门的小白上手。

在这里我用到了Fragment(碎片),一般在Andriod平板中很常见,但是因为项目需要所以就用到了。

这里5种代码都齐全了,所以复制的时候大家可以把Fragment换成Activity来用,新建Activity,将红色代码复制进去就行了。

说一下可能会遇到的问题:

1.代码中用到的图片肯定要换,不然报错。

2.Activity那块一定要注意

3.我把控件的响应事件放在Adapter

4.导包

5.代码中有悬浮按钮的空间,是我自定义的,可以删除。还有下边两个Fragment。



你可能感兴趣的:(Android ListView的应用(如何去实现ListView控件(自定义适配器)))