有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当我在ListView中滚动按钮位置时发生变化

我已经实现了一个ListView。从ListView我将向购物车添加一个产品。我的问题是,如果我添加第一个产品,我会将按钮名称Addtocart更改为Added。如果我滚动ListView,第四个位置的产品按钮名称将更改为“添加”

我该如何解决这个问题

这是我的代码:

holderForGrid.AddtoCart.setTag(position);
holderForGrid.AddtoCart.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {        
            holderForGrid.AddtoCart.setText("Added");
    }
});

适配器类:

类ListAdapter扩展了BaseAdapter{

    public Context context;


    public ListAdapter(Context a,List<BusinessCatalogVariables> listDataHeader) {
        this.listDataHeader = listDataHeader;
        context = a;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return catalogList.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
    @Override
    public View getView(final int position, View convertView, ViewGroup arg2) {
        final ViewHolderGrid holderForGrid;
        if (convertView == null) {
            convertView = getLayoutInflater().inflate(R.layout.catalog_list_item, null);
            holderForGrid = new ViewHolderGrid(convertView);
            convertView.setTag(holderForGrid);

        } else {
            holderForGrid = (ViewHolderGrid) convertView.getTag();
        }

        finalCatalogVariables Catalog = catalogList.get(position);

        holderForGrid.AddtoCart.setClickable(false);


        holderForGrid.AddtoCart.setTag(position);

        holderForGrid.AddtoCart.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                 int position1=(Integer)arg0.getTag();

                AddedProduct = (String) holderForGrid.CatalogHeader.getText();
                holderForGrid.AddtoCart.setText("Added");


            }
        });



        return convertView;
    }



    private class ViewHolderGrid {

        Button AddtoCart = null;

        ViewHolderGrid(View convertView) {


            AddtoCart = (Button) convertView.findViewById(R.id.btn_AddtoCart);
        }
    }

}

共 (1) 个答案

  1. # 1 楼答案

    finalCatalogVariables类中创建boolean变量added。 并为该变量创建getter、setter方法。 比如

    class finalCatalogVariables{
    
        // other variable and methods
    
        boolean added;
    
        public boolean isAdded()
        {
           return this.added;
        }
    
        public void setAdded(boolean added){
           this.added = added;
        }
    }
    

    然后在getView方法中点击holderForGrid.AddtoCart

    public View getView(final int position, View convertView, ViewGroup arg2) {
            final ViewHolderGrid holderForGrid;
            if (convertView == null) {
                convertView = getLayoutInflater().inflate(R.layout.catalog_list_item, null);
                holderForGrid = new ViewHolderGrid(convertView);
                convertView.setTag(holderForGrid);
    
            } else {
                holderForGrid = (ViewHolderGrid) convertView.getTag();
            }
    
            finalCatalogVariables catalog = catalogList.get(position);
    
            if(catalog.isAdded()){
                 holderForGrid.AddtoCart.setText("Added");
            }else{
                  holderForGrid.AddtoCart.setText("Add to cart");
            }
    
            holderForGrid.AddtoCart.setClickable(false);
    
    
            holderForGrid.AddtoCart.setTag(position);
    
            holderForGrid.AddtoCart.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View arg0) {
    
                    catalog.setAdded(true);    
    
                     int position1=(Integer)arg0.getTag();
    
                    AddedProduct = (String) holderForGrid.CatalogHeader.getText();
                   // holderForGrid.AddtoCart.setText("Added");
    
    
                }
            });
            return convertView;
        }