热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在recyclerviewAndroidFirebase中计算总数?-HowtocalculatetotalinrecyclerviewAndroidFirebase?

Iamwanttoimplementsomethinglikeaplannerthatcontainsanameofplacesandticketprice.Ia

I am want to implement something like a planner that contains a name of places and ticket price. I am using recyclerview in fragment and textview. I have some item in recyclerview. Now I want to get a balance for my planner it should be budget-total of all ticket's price = balance in my textview which is in fragment. Here is image what I want to achieve.

我想实现类似于包含地点名称和票价的计划程序。我在fragment和textview中使用了recyclerview。我在recyclerview中有一些项目。现在我想为我的计划者得到一个余额,它应该是我的文本视图中所有票证价格=余额的预算总额。这是我想要实现的形象。

Click here for image

点击此处查看图片

public class planner extends AppCompatActivity {

    private RecyclerView mBlogList;
    private DatabaseReference mDatabase;
    private DatabaseReference mDatabaseCurrentUser;
    private DatabaseReference mDatabaseUsers;
    private DatabaseReference mDatabaseTicket;
    private DatabaseReference mDatabaseLoc;
    private DatabaseReference mDatabaseBudget;
    private Query mQueryCurrentUser;
    String currentUserId;
    private FirebaseAuth mAuth;
    private FirebaseAuth.AuthStateListener mAuthListener;
    private DrawerLayout mDraweLayout;
    private ActionBarDrawerToggle mToggle;
    private TextView mBudget;
    private TextView mBalance;

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

        mDraweLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
        mToggle = new ActionBarDrawerToggle(this, mDraweLayout, R.string.open, R.string.close);

        mAuth = FirebaseAuth.getInstance();

        mDraweLayout.addDrawerListener(mToggle);
        mToggle.syncState();

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        NavigationView mNavigatiOnView= (NavigationView) findViewById(R.id.nav_menu);
        mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                switch (menuItem.getItemId()) {

                    case(R.id.nav_home):
                        Intent home = new Intent(getApplicationContext(), home.class);
                        startActivity(home);
                        break;

                    case(R.id.nav_account):
                        Intent acc = new Intent(getApplicationContext(), updateTourist.class);
                        startActivity(acc);
                        break;

                    case(R.id.nav_go):
                        Intent goActivity = new Intent(getApplicationContext(), placepicker.class);
                        startActivity(goActivity);
                        break;

                    case(R.id.nav_planner):
                        Intent planActivity = new Intent(getApplicationContext(), planner.class);
                        startActivity(planActivity);
                        break;

                    case(R.id.nav_budget):
                        Intent budget = new Intent(getApplicationContext(), createBudget.class);
                        startActivity(budget);
                        break;

                    case(R.id.nav_logout):
                        logout();
                        break;
                }
                return true;
            }
        });

        mAuth = FirebaseAuth.getInstance();

        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {

                if (firebaseAuth.getCurrentUser() == null) {

                    Intent loginIntent = new Intent(planner.this, login.class);
                    loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(loginIntent);

                }

            }
        };

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Location");
        mDatabaseUsers = FirebaseDatabase.getInstance().getReference().child("Tourist");

        currentUserId = mAuth.getCurrentUser().getUid();
        mDatabaseCurrentUser = FirebaseDatabase.getInstance().getReference().child("Location");

        mQueryCurrentUser = mDatabaseCurrentUser.orderByChild("uid").equalTo(currentUserId);


        mBlogList = (RecyclerView) findViewById(R.id.blog_list);


        mDatabaseUsers.keepSynced(true);

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        layoutManager.setReverseLayout(true);
        layoutManager.setStackFromEnd(true);

        mBlogList.setHasFixedSize(true);
        mBlogList.setLayoutManager(layoutManager);


        budget();

        checkUserExist();
    }

    @Override
    protected void onStart() {
        super.onStart();

        mAuth.addAuthStateListener(mAuthListener);

        FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter(

                location.class,
                R.layout.location_list,
                BlogViewHolder.class,
                mQueryCurrentUser

        ) {
            @Override
            protected void populateViewHolder(BlogViewHolder viewHolder, location model, final int position) {

                final String post_key = getRef(position).getKey();

                viewHolder.setName(model.getName());
                viewHolder.setAddress(model.getAddress());
                viewHolder.setTicket(model.getTicket());
                if


                viewHolder.mView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        Intent singlePlanner = new Intent(planner.this, deleteLocation.class);
                        singlePlanner.putExtra("plan_id", post_key);
                        startActivity(singlePlanner);


                    }
                });
            }


        };

        mBlogList.setAdapter(firebaseRecyclerAdapter);
    }

    //recyclerview
    public static class BlogViewHolder extends RecyclerView.ViewHolder {

        View mView;

        FirebaseAuth mAuth;

        public BlogViewHolder(View itemView) {
            super(itemView);

            mView = itemView;

            mAuth = FirebaseAuth.getInstance();


        }


        public void setName(String Name) {

            TextView post_locName = (TextView) mView.findViewById(R.id.post_title);
            post_locName.setText(Name);

        }

        public void setAddress(String Address) {

            TextView post_locAdd = (TextView) mView.findViewById(R.id.post_desc);
            post_locAdd.setText(Address);

        }

        public void setTicket(final Integer ticket){
            TextView post_ticket = (TextView) mView.findViewById(R.id.post_ticket);

            post_ticket.setText(Integer.toString(ticket));


        }


    }


    //check user exist
    private void checkUserExist() {

        if (mAuth.getCurrentUser() != null) {

            final String user_id = mAuth.getCurrentUser().getUid();

            mDatabaseUsers.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    if (mAuth.getCurrentUser().getUid().equals(user_id)) {


                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }
    }

    //retrieve budget
    private void budget()
    {
        mDatabaseBudget = FirebaseDatabase.getInstance().getReference().child("Plan").child("createPlan").child("plan_budget");;
        mDatabaseBudget.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                TextView mBudget = (TextView) findViewById(R.id.post_budget);

                Integer value = dataSnapshot.getValue(Integer.class);

                mBudget.setText(Integer.toString(value));
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {


        if(item.getItemId() == R.id.action_add){

            startActivity(new Intent(planner.this, placepicker.class));

        }


        if(mToggle.onOptionsItemSelected(item)){

            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_menu, menu);
        return super.onCreateOptionsMenu(menu);

    }

    private void logout() {

        mAuth.signOut();

    }
}

1 个解决方案

#1


0  

I think you have different options. One is to override onDataChanged() method from the adapter. It should do the sum of all the items in the Snapshot and edit the TextView with the final sum. Here is the documentation for it: https://github.com/firebase/FirebaseUI-Android/tree/master/database#data-and-error-events

我认为你有不同的选择。一种是从适配器覆盖onDataChanged()方法。它应该执行快照中所有项目的总和,并使用最终总和编辑TextView。以下是它的文档:https://github.com/firebase/FirebaseUI-Android/tree/master/database#data-and-error-events

The second one is to observe the Snapshot with the items ObservableSnapshotArray, iterate over the items when is updated and do the sum of the prices. But I think that for your case the first one would be better.

第二个是使用ObservableSnapshotArray项目观察快照,在更新时迭代项目并执行价格总和。但我认为对于你的情况,第一个会更好。


推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 添加环境光使正方体显示更真实
    本文介绍了如何给正方体添加环境光以使其显示更真实。通过在代码中加入环境光的计算,可以让物体的背光部分不再完全黑色,从而增加物体的真实感。代码中使用了顶点属性、光照颜色、光照方向、环境光等参数来计算物体的漫反射,并将计算结果与顶点颜色相乘得到最终的颜色。通过调整环境光的参数,可以达到不同的光照效果。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
author-avatar
George
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有