问题描述
我正在创建一个应用,而我的应用则基于费用管理器。
- 收入收入
- 入门费用
但是当我按下那个浮动按钮时,我无法插入数据...但是当我两次按下时,我可以向其中添加数据。
但是我不想单击两次并添加数据...仅单击一次即可打开插入数据片段
import android.app.AlertDialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import org.w3c.dom.Text;
import java.text.DateFormat;
import java.util.Date;
import natureorigin.in.Model.Data;
/**
* A simple {@link Fragment} subclass.
* Use the {@link DasshboardFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class DasshboardFragment extends Fragment {
// floating btn
private FloatingActionButton fab_main_btn;
private FloatingActionButton fab_income_btn;
private FloatingActionButton fab_expense_btn;
//Floating btn txtview
private TextView fab_income_txt;
private TextView fab_expense_txt;
//boolean
private boolean isOpen = false;
// Animation
private Animation FadeOpen,Fadeclose;
//firebase connection...
private FirebaseAuth mAuth;
private DatabaseReference mIncomeDatabase;
private DatabaseReference mExpenseDatabase;
//dash income and expense....
private TextView totalincomeresult;
private TextView totalexpenseresult;
//REcycler view..
private RecyclerView mrecyclerincomeView;
private RecyclerView mrecyclerexpenseView;
// Todo: Rename parameter arguments,choose names that match
// the fragment initialization parameters,e.g. ARG_ITEM_NUMBER
private static final String ARG_ParaM1 = "param1";
private static final String ARG_ParaM2 = "param2";
// Todo: Rename and change types of parameters
private String mParam1;
private String mParam2;
public DasshboardFragment() {
// required empty public constructor
}
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment DasshboardFragment.
*/
// Todo: Rename and change types and number of parameters
public static DashboardFragment newInstance(String param1,String param2) {
DashboardFragment fragment = new DashboardFragment();
Bundle args = new Bundle();
args.putString(ARG_ParaM1,param1);
args.putString(ARG_ParaM2,param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_ParaM1);
mParam2 = getArguments().getString(ARG_ParaM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
View myview= inflater.inflate(R.layout.fragment_dasshboard,container,false);
//Connect Floting Btn to Layout
fab_main_btn=myview.findViewById(R.id.fb_main_plus_btn);
fab_income_btn=myview.findViewById(R.id.income_ft_btn);
fab_expense_btn=myview.findViewById(R.id.expense_ft_btn);
// Connect Floting txt.
fab_income_txt=myview.findViewById(R.id.income_ft_txt);
fab_expense_txt=myview.findViewById(R.id.expense_ft_txt);
//total income and expense..
totalincomeresult=myview.findViewById(R.id.income_set_result);
totalexpenseresult=myview.findViewById(R.id.expense_set_result);
//REcycler view...
mrecyclerincomeView=myview.findViewById(R.id.recycler_id_income_dash);
mrecyclerexpenseView=myview.findViewById(R.id.recycler_id_expense_dash);
//Animation connect....
FadeOpen= AnimationUtils.loadAnimation(getActivity(),R.anim.fade_open);
Fadeclose= AnimationUtils.loadAnimation(getActivity(),R.anim.fade_close);
//firebase connection....
mAuth=FirebaseAuth.getInstance();
FirebaseUser mUser=mAuth.getCurrentUser();
String uid=mUser.getUid();
mIncomeDatabase= FirebaseDatabase.getInstance().getReference().child("IncomeData").child(uid);
mExpenseDatabase= FirebaseDatabase.getInstance().getReference().child("ExpenseData").child(uid);
fab_main_btn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isOpen){
addData();
fab_income_btn.startAnimation(Fadeclose);
fab_expense_btn.startAnimation(Fadeclose);
fab_income_btn.setClickable(false);
fab_expense_btn.setClickable(false);
fab_income_txt.startAnimation(Fadeclose);
fab_expense_txt.startAnimation(Fadeclose);
fab_income_txt.setClickable(false);
fab_expense_txt.setClickable(false);
isOpen=false;
}else{
fab_income_btn.startAnimation(FadeOpen);
fab_expense_btn.startAnimation(FadeOpen);
fab_income_btn.setClickable(true);
fab_expense_btn.setClickable(true);
fab_income_txt.startAnimation(FadeOpen);
fab_expense_txt.startAnimation(FadeOpen);
fab_income_txt.setClickable(true);
fab_expense_txt.setClickable(true);
isOpen=true;
}
}
});
//Calculate total income..
mIncomeDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
int incometotasum=0;
for (DataSnapshot mysnapshot:snapshot.getChildren()){
Data data = mysnapshot.getValue(Data.class);
incometotasum+=data.getAmount();
String sttotalsum=String.valueOf(incometotasum);
totalincomeresult.setText(sttotalsum+".00");
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//Calculate total expense..
mExpenseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
int expensetotalsum=0;
for (DataSnapshot mysnapshot:snapshot.getChildren()){
Data data = mysnapshot.getValue(Data.class);
expensetotalsum+=data.getAmount();
String stExpensetotalsum=String.valueOf(expensetotalsum);
totalexpenseresult.setText(stExpensetotalsum+".00");
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//REcycler...
linearlayoutmanager layoutManagerincome=new linearlayoutmanager(getActivity(),linearlayoutmanager.HORIZONTAL,false);
layoutManagerincome.setStackFromEnd(true);
layoutManagerincome.setReverseLayout(true);
mrecyclerincomeView.setHasFixedSize(true);
mrecyclerincomeView.setLayoutManager(layoutManagerincome);
linearlayoutmanager layoutManagerexpense=new linearlayoutmanager(getActivity(),false);
layoutManagerexpense.setStackFromEnd(true);
layoutManagerexpense.setReverseLayout(true);
mrecyclerexpenseView.setHasFixedSize(true);
mrecyclerexpenseView.setLayoutManager(layoutManagerexpense);
return myview;
}
//Floting btn anim....
private void ftAnimation(){
if(isOpen){
fab_income_btn.startAnimation(Fadeclose);
fab_expense_btn.startAnimation(Fadeclose);
fab_income_btn.setClickable(false);
fab_expense_btn.setClickable(false);
fab_income_txt.startAnimation(Fadeclose);
fab_expense_txt.startAnimation(Fadeclose);
fab_income_txt.setClickable(false);
fab_expense_txt.setClickable(false);
isOpen=false;
}else{
fab_income_btn.startAnimation(FadeOpen);
fab_expense_btn.startAnimation(FadeOpen);
fab_income_btn.setClickable(true);
fab_expense_btn.setClickable(true);
fab_income_txt.startAnimation(FadeOpen);
fab_expense_txt.startAnimation(FadeOpen);
fab_income_txt.setClickable(true);
fab_expense_txt.setClickable(true);
isOpen=true;
}
}
private void addData(){
//Fab Button Income....
fab_income_btn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
incomeDataInsert();
}
});
fab_expense_btn.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
expensedatainsert();
}
});
}
public void incomeDataInsert(){
AlertDialog.Builder mydialog=new AlertDialog.Builder(getActivity());
LayoutInflater inflater= LayoutInflater.from(getActivity());
View myview =inflater.inflate(R.layout.custom_layout_for_insert_data,null);
mydialog.setView(myview);
final AlertDialog dialog=mydialog.create();
final EditText editAmount=myview.findViewById(R.id.amount_edt);
final EditText editProductname=myview.findViewById(R.id.Product_name_edt);
final EditText editQuantity=myview.findViewById(R.id.quantity_edt);
Button btnSave = myview.findViewById(R.id.save_btn);
Button btnCancel = myview.findViewById(R.id.cancel_btn);
btnSave.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String amount=editAmount.getText().toString().trim();
String productname=editProductname.getText().toString().trim();
String quantity=editQuantity.getText().toString().trim();
if(TextUtils.isEmpty(amount)){
editAmount.setError("required Field..");
return;
}
int ouramountint=Integer.parseInt(amount);
if(TextUtils.isEmpty(productname)){
editProductname.setError("required Field..");
return;
}
if(TextUtils.isEmpty(quantity)){
editQuantity.setError("required Field..");
return;
}
String id=mIncomeDatabase.push().getKey();
String mDate=DateFormat.getDateInstance().format(new Date());
Data data = new Data(ouramountint,productname,quantity,id,mDate);
mIncomeDatabase.child(id).setValue(data);
Toast.makeText(getActivity(),"DATA ADDED",Toast.LENGTH_SHORT).show();
ftAnimation();
dialog.dismiss();
}
});
btnCancel.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ftAnimation();
dialog.dismiss();
}
});
dialog.show();
}
public void expensedatainsert(){
AlertDialog.Builder mydialog=new AlertDialog.Builder(getActivity());
LayoutInflater inflater=LayoutInflater.from(getActivity());
View myview=inflater.inflate(R.layout.custom_layout_for_insert_data,null);
mydialog.setView(myview);
final AlertDialog dialog = mydialog.create();
final EditText amount = myview.findViewById(R.id.amount_edt);
final EditText productname=myview.findViewById(R.id.Product_name_edt);
final EditText quantity = myview.findViewById(R.id.quantity_edt);
Button btnSave=myview.findViewById(R.id.save_btn);
Button btnCancel = myview.findViewById(R.id.cancel_btn);
btnSave.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String tmAmount = amount.getText().toString().trim();
String tmProductname=productname.getText().toString().trim();
String tmQuantity = quantity.getText().toString().trim();
if (TextUtils.isEmpty(tmAmount)){
amount.setError("required Field..");
return;
}
int inamount=Integer.parseInt(tmAmount);
if(TextUtils.isEmpty(tmProductname)){
productname.setError("required Field..");
return;
}
if (TextUtils.isEmpty(tmQuantity)){
quantity.setError("required Field..");
return;
}
String id=mExpenseDatabase.push().getKey();
String mDate=DateFormat.getDateInstance().format(new Date());
Data data = new Data(inamount,tmProductname,tmQuantity,mDate);
mExpenseDatabase.child(id).setValue(data);
Toast.makeText(getActivity(),Toast.LENGTH_SHORT).show();
ftAnimation();
dialog.dismiss();
}
});
btnCancel.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ftAnimation();
dialog.dismiss();
}
});
dialog.show();
}
@Override
public void onStart() {
super.onStart();
FirebaseRecyclerOptions<Data> options=
new FirebaseRecyclerOptions.Builder<Data>()
.setQuery(mIncomeDatabase,Data.class)
.setLifecycleOwner(this)
.build();
FirebaseRecyclerAdapter<Data,DasshboardFragment.Incomeviewholder> incomeAdapter = new FirebaseRecyclerAdapter<Data,DasshboardFragment.Incomeviewholder>(options) {
@NonNull
@Override
public DasshboardFragment.Incomeviewholder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
return new DasshboardFragment.Incomeviewholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.dashboard_income,parent,false));
}
@Override
protected void onBindViewHolder(@NonNull DasshboardFragment.Incomeviewholder holder,final int position,@NonNull final Data model) {
holder.setIncomeproductname(model.getProduct_name());
holder.setIncomeamount(model.getAmount());
holder.setIncomedate(model.getDate());
}
};
mrecyclerincomeView.setAdapter(incomeAdapter);
FirebaseRecyclerOptions<Data> toptions=
new FirebaseRecyclerOptions.Builder<Data>()
.setQuery(mExpenseDatabase,DasshboardFragment.Expenseviewholder> expenseAdapter = new FirebaseRecyclerAdapter<Data,DasshboardFragment.Expenseviewholder>(toptions) {
@NonNull
@Override
public DasshboardFragment.Expenseviewholder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
return new DasshboardFragment.Expenseviewholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.dashboard_expense,false));
}
@Override
protected void onBindViewHolder(@NonNull DasshboardFragment.Expenseviewholder viewholder,@NonNull final Data model) {
viewholder.setexpenseproductname(model.getProduct_name());
viewholder.setexpenseamount(model.getAmount());
viewholder.setexpensedate(model.getDate());
}
};
mrecyclerexpenseView.setAdapter(expenseAdapter);
}
//for income data
public static class Incomeviewholder extends RecyclerView.ViewHolder{
View mIncomeview;
public Incomeviewholder(View itemView){
super(itemView);
mIncomeview=itemView;
}
public void setIncomeproductname (String productname){
TextView mproductname=mIncomeview.findViewById(R.id.product_income_ds);
mproductname.setText(productname);
}
public void setIncomeamount (int amount){
TextView mamount=mIncomeview.findViewById(R.id.amount_income_ds);
String stamount=String.valueOf(amount);
mamount.setText(stamount);
}
public void setIncomedate (String date){
TextView mdate=mIncomeview.findViewById(R.id.date_income_ds);
mdate.setText(date);
}
}
public static class Expenseviewholder extends RecyclerView.ViewHolder{
View mExpenseview;
public Expenseviewholder(View itemView){
super(itemView);
mExpenseview=itemView;
}
public void setexpenseproductname (String productname){
TextView mproductname=mExpenseview.findViewById(R.id.product_expense_ds);
mproductname.setText(productname);
}
public void setexpenseamount (int amount){
TextView mamount=mExpenseview.findViewById(R.id.amount_expense_ds);
String stramount=String.valueOf(amount);
mamount.setText(stramount);
}
public void setexpensedate (String date){
TextView mdate=mExpenseview.findViewById(R.id.date_expense_ds);
mdate.setText(date);
}
}
}
这是我的dashboard_fragment xml中的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".DasshboardFragment">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
app:cardElevation="5dp"
android:elevation="10dp"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="29dp"
android:gravity="center"
android:text="INCOME"
android:textAlignment="center"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/income_clr">
</TextView>
</RelativeLayout>
<RelativeLayout
android:layout_width="2dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="29dp"
android:gravity="center"
android:text="EXPENSE"
android:textAlignment="center"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/eexpense_clr">
</TextView>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:layout_marginTop="7dp"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="29dp"
android:gravity="center"
android:id="@+id/income_set_result"
android:text="000.000"
android:textAlignment="center"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/income_clr">
</TextView>
</RelativeLayout>
<RelativeLayout
android:layout_width="2dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1">
<TextView
android:layout_width="match_parent"
android:layout_height="29dp"
android:gravity="center"
android:id="@+id/expense_set_result"
android:text="000.000"
android:textAlignment="center"
android:textAppearance="?android:textAppearanceLarge"
android:textColor="@color/eexpense_clr">
</TextView>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_marginTop="10dp"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:text="INCOME"
android:textAppearance="?android:textAppearanceLarge"
android:padding="10dp"
android:layout_height="wrap_content">
</TextView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_id_income_dash"
android:layout_width="match_parent"
android:layout_height="200dp">
</androidx.recyclerview.widget.RecyclerView>
<TextView
android:layout_width="match_parent"
android:text="EXPENSE"
android:textAppearance="?android:textAppearanceLarge"
android:padding="10dp"
android:layout_height="wrap_content">
</TextView>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_id_expense_dash"
android:layout_width="match_parent"
android:layout_height="200dp">
</androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_width="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginRight="15dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="200dp"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Expense"
android:id="@+id/expense_ft_txt"
android:padding="5dp"
android:textColor="@color/colorAccent"
android:background="@color/eexpense_clr"
android:layout_gravity="center"
android:layout_marginRight="5dp"
android:layout_marginEnd="5dp"
android:visibility="invisible"
android:textAppearance="?android:textAppearanceSmall"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/expense_ft_btn"
android:layout_gravity="bottom|end"
android:backgroundTint="@color/colorPrimary"
android:elevation="6dp"
app:fabSize="mini"
android:visibility="invisible"
app:pressedTranslationZ="12dp"
android:src="@drawable/expense"
/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginRight="15dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="140dp"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Income"
android:id="@+id/income_ft_txt"
android:padding="5dp"
android:textColor="@color/colorAccent"
android:background="@color/income_clr"
android:layout_gravity="center"
android:layout_marginRight="5dp"
android:layout_marginEnd="5dp"
android:visibility="invisible"
android:textAppearance="?android:textAppearanceSmall"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/income_ft_btn"
android:layout_gravity="bottom|end"
android:backgroundTint="@color/colorPrimary"
android:elevation="6dp"
app:fabSize="mini"
android:visibility="invisible"
app:pressedTranslationZ="12dp"
android:src="@drawable/income"
/>
</LinearLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fb_main_plus_btn"
android:layout_gravity="bottom|end"
android:layout_marginBottom="65dp"
android:layout_marginRight="20dp"
android:layout_marginEnd="20dp"
android:backgroundTint="@color/dashboard_clr"
app:fabSize="normal"
android:src="@drawable/dashboard"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</LinearLayout>
请任何人帮助我
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)