当前位置: 首页 > 知识库问答 >
问题:

在android工作室的文本视图中显示回收视图的项目编号

金英华
2023-03-14

我想在文本视图中显示我的recyclerview的总项目数。如果添加或删除了新项目,则应更新textview。还可以计算recyclerview中项目列表中项目的总价,并显示在recyclerview列表下方的文本视图中。

下面是我的recyclerview适配器:

public class CartAdapter extends RecyclerView.Adapter<CartAdapter.ViewHolder> {

    private List<ProductView.Data> productData = Collections.emptyList();
    static List<ProductModel> productModelList;
    static  Context context;
    DatabaseHandler mDatabaseHandler;

    public CartAdapter(Context context, List<ProductModel> dbList ){
        this.productModelList = new ArrayList<ProductModel>();
        this.context = context;
        this.productModelList = dbList;
        mDatabaseHandler = new DatabaseHandler( context );
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Context context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        // Inflate the custom layout
        View cartListView = inflater.inflate(R.layout.list_item_cart, parent, false);

        // Return a new holder instance
        ViewHolder viewHolder = new ViewHolder(context,cartListView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {

        holder.tvProductName.setText(productModelList.get(position).getTitle());
        holder.tvProductPrice.setText(productModelList.get(position).getPrice());
        Glide
                .with(context)
                .load(productModelList.get(position).getImageUrl())
                .into(holder.imgProduct);
        // holder.tvProductStatus.setText(productModelList.get(position).getIsAvailable());
        holder.tvSize.setText(productModelList.get(position).getSize());
        holder.tvProductQuantity.setText(Integer.toString(productModelList.get(position).getQuantity()));
        holder.tvColor.setText(productModelList.get(position).getColor());

        //holder.tvMaterial.setText(productModelList.get(position).getMaterial());

        holder.imgDelete.setClickable(true);
        holder.imgDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String idForDelete = String.valueOf(productModelList.get(position).getVariantId());

                mDatabaseHandler.deleteARow(idForDelete);
                productModelList.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position,productModelList.size());
            }
        });
    }

    @Override
    public int getItemCount() {
        return productModelList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView tvProductName, tvProductPrice, tvProductQuantity,tvColor,
                tvSize;
        ImageView imgProduct;
        ImageButton imgDelete;
        Context context;

        public ViewHolder(Context mContext, View itemView) {
            super(itemView);

            this.tvProductName = (TextView) itemView.findViewById(R.id.tv_cart_product_name);
            this.tvProductPrice = (TextView) itemView.findViewById(R.id.tv_cart_product_price);
            this.tvProductQuantity = (TextView) itemView.findViewById(R.id.tv_cart_product_Quantity);
            this.imgProduct = (ImageView) itemView.findViewById(R.id.img_cart_item_product);
            this.tvColor = (TextView)itemView.findViewById(R.id.tv_color);
            this.tvSize = (TextView) itemView.findViewById(R.id.tv_size);
            this.imgDelete = (ImageButton) itemView.findViewById(R.id.img_cart_delete);
            //  store the context ///
            this.context = mContext;
        }
    }

java类:

public class CartActivity extends AppCompatActivity {
    DatabaseHandler helper;
    List<ProductModel> dbList;
    RecyclerView mRecyclerView;
    Toolbar toolbar;
    Button btnCheckout, btnContinueShopping;
    TextView tvTotalNoOfItems, tvTotalPrice;
    String p;
    String i;

    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cart);

        p = getIntent().getStringExtra("variant_id");
        i = getIntent().getStringExtra("product_id");
        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            p = extras.getString("variant_id");
            i= extras.getString("product_id");
        }

        toolbar = (Toolbar) findViewById(R.id.customToolBar);
        setSupportActionBar(toolbar);
        setTitle("Check-out");
        toolbar.setTitleTextColor(Color.BLACK);

        toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

        helper = new DatabaseHandler(this);
        dbList= new ArrayList<ProductModel>();
        dbList = helper.getDataFromDB();

        mRecyclerView = (RecyclerView)findViewById(R.id.rv_cart_item_list);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        mAdapter = new CartAdapter(this,dbList);
        mRecyclerView.setAdapter(mAdapter);

        tvTotalNoOfItems = (TextView)findViewById(R.id.tvTotalCartItems);
        tvTotalPrice = (TextView)findViewById(R.id.tvTotalCartItemsPrice);
        String totalPrice = "";
        for (int i = 0; i<dbList.size(); i++)
        {
            totalPrice = totalPrice + dbList.get(i).getPrice().toString();
        }
        tvTotalPrice.setText(totalPrice);

        btnContinueShopping = (Button)findViewById(R.id.btnBackToProductActivity);
        btnContinueShopping.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launchCOllectionActivity = new Intent(CartActivity.this, CollectionActivity.class);
                startActivity(launchCOllectionActivity);
                finish();
            }
        });
        btnCheckout = (Button)findViewById(R.id.btn_checkout);
        btnCheckout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent launchCheckoutActivity = new Intent(CartActivity.this,CheckoutActivity.class);
                startActivity(launchCheckoutActivity);
            }
        });
    }
}

共有2个答案

齐文栋
2023-03-14

只需在适配器设置行下方添加这一行

tvTotalNoOfItems.setText(mAdapter.getCount());

并将其添加到适配器类中,在该类中删除操作执行

String totalPrice = "";
((CartActivity)context).tvTotalNoOfItems.setText(getCount());
for (int i = 0; i<productModelList.size(); i++)
{
    totalPrice = totalPrice + productModelList.get(i).getPrice().toString();
}
((CartActivity)context).tvTotalPrice.setText(""+totalPrice);

就这样公开你的文本视图

public TextView tvTotalNoOfItems, tvTotalPrice;
邬良才
2023-03-14

首先,向适配器添加以下getter:

public List<ProductModel> getItems(){
        return productModelList;
}

然后,您可以订阅适配器数据更改并执行以下操作:

mAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
        @Override
        public void onChanged () {
            tvTotalNoOfItems.setText(mAdapter.getItemCount());
            String totalPrice = "";
            for (int i = 0; i < ((CartAdapter)mAdapter).getItems().size(); i++) {
                totalPrice = totalPrice + ((CartAdapter)mAdapter).getItems().get(i).getPrice().toString();
            }
            tvTotalPrice.setText("" + totalPrice);
        }
    });
 类似资料:
  • 我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件

  • 我刚开始在firebase工作。我设法上传了文本和图像,但是,我无法检索要显示在回收器视图中的图像,只能检索文本。我用的是毕加索依赖。我已经包括了我的主要活动。java类,该类负责显示从问题“我的适配器”中的firebase检索的回收器视图项。java类和模型类。我相信,在我将图像URI上载到firebase存储时,我可能犯了没有存储图像URI的错误,因此适配器无法检索图像位置。我想这可能是因为我

  • 我正在制作一个应用程序,其中有回收器视图。但我无法在我的应用程序中看到回收器视图。当我检查Logcat时,它显示'e/recyclerview:No adapter attached;正在跳过布局‘。为什么会发生这种情况,我该如何修复? 我的主要活动代码: 我的适配器(PostAdapter.java)类代码:

  • 我试图使用文本视图来显示从列表视图中选择的联系人。列表视图包含用户从加载到列表视图中的Android电话簿中选择的联系人。文本视图将只显示列表视图中的最后一项,即使用户选择了另一个不是列表视图中最后一个联系人的联系人。 即使在我的日志打印中,我可以看到我选择了哪个联系人,但当我试图将其打印到另一个窗口中的文本视图时,它仍然默认为最后一个联系人。 添加调制解调器。JAVA 主要活动。JAVA

  • 我在中显示一个网络列表,我希望当我点击一个项目时,它会显示一个请求

  • 当我按下后退按钮时,这个ShoppingActivity会被破坏,当我再次访问该activity时,我发现我的回收器视图项目被替换了两次。我该如何解决这个问题? ShoppingActivity.java这里编写的所有代码和volley类也在这里调用,当我按下后退键并再次访问该活动时,我发现我的回收器视图项被替换了 @override protected void onCreate(Bundle