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();
}
}
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项目观察快照,在更新时迭代项目并执行价格总和。但我认为对于你的情况,第一个会更好。