当我滚动按钮位置在ListView中更改

时间:2015-09-09 06:04:23

标签: java android 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);
        }
    }

}

4 个答案:

答案 0 :(得分:0)

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

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.rowlayout, null);

    if (imageLoader == null)
        imageLoader = Session.getInstance().getImageLoader();
 //write your declaration code 


    List m = Yourarray.get(position);

    // thumbnail image


  convertView.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
           //your code
         int position1=(Integer)arg0.getTag();

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

        }
    });
    return convertView;
}

答案 1 :(得分:0)

在您的适配器类中覆盖下面提到的两个方法。

Override
public int getViewTypeCount() {

return getCount();
}

@Override
public int getItemViewType(int position) {

return position;
}

答案 2 :(得分:0)

我认为问题在于,如果更改视图上的按钮然后滚动得足够远以使视图消失,Android会将视图位置分配给listView中的另一个项目。

您需要以某种方式维护每个产品的“已添加”状态,并让您的适配器决定根据该标签显示哪个标签。

答案 3 :(得分:0)

boolean课程中创建added变量finalCatalogVariables。 并为此变量创建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;
    }