main.xml
Main (XML)
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/tabLayout"/>
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
main.java
Main.java
package com.example.expensetracker;
import android.os.Bundle;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private TabLayout tabLayout;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
tabLayout = findViewById(R.id.tabLayout);
TabAdapter adapter = new TabAdapter(getSupportFragmentManager());
adapter.addFragment(new IncomeFragment(), "Income");
adapter.addFragment(new ExpenseAdapter(), "Expenses");
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
}
tabactivity.java
TabActivity.java
package com.example.expensetracker;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class TabAdapter extends FragmentPagerAdapter {
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();
public TabAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
public void addFragment(Fragment fragment, String title) {
fragmentList.add(fragment);
fragmentTitleList.add(title);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitleList.get(position);
}
}
incomefragment.java
IncomeFragment.java
ckage com.example.expensetracker;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
public class IncomeFragment extends Fragment {
private EditText incomeInput;
private Button submitButton;
private int totalIncome = 0;
private int totalExpenses = 0; // To store expenses received from ExpensesFragment
public IncomeFragment() {
super(R.layout.activity_income_fragment);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
incomeInput = view.findViewById(R.id.incomeInput);
submitButton = view.findViewById(R.id.submitButton);
// Receiving expenses from ExpensesFragment
if (getArguments() != null) {
totalExpenses = getArguments().getInt("totalExpenses", 0);
}
submitButton.setOnClickListener(v -> {
String incomeText = incomeInput.getText().toString();
if (!incomeText.isEmpty()) {
totalIncome = Integer.parseInt(incomeText);
Toast.makeText(getContext(), "Income: ₹" + totalIncome, Toast.LENGTH_SHORT).show();
// Sending data to SummaryActivity
Intent intent = new Intent(getActivity(), SummaryActivity.class);
intent.putExtra("totalIncome", totalIncome);
intent.putExtra("totalExpenses", totalExpenses);
startActivity(intent);
} else {
Toast.makeText(getContext(), "Please enter a valid income!", Toast.LENGTH_SHORT).show();
}
});
}
}
incomefragment.xml
IncomeFragment (XML)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center"
>
<EditText
android:id="@+id/incomeInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Income"
android:inputType="number"/>
<Button
android:id="@+id/submitButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Submit"/>
</LinearLayout>
expenseadapter.java
ExpenseAdapter.java
package com.example.expensetracker;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
public class ExpenseAdapter extends Fragment {
private EditText rentInput, groceriesInput, billsInput, transportInput;
private Button calculateButton;
private int totalExpenses = 0;
public ExpenseAdapter() {
super(R.layout.activity_expense_adapter);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
rentInput = view.findViewById(R.id.rent);
groceriesInput = view.findViewById(R.id.groceries);
billsInput = view.findViewById(R.id.bills);
transportInput = view.findViewById(R.id.transport);
calculateButton = view.findViewById(R.id.calculateButton);
calculateButton.setOnClickListener(v -> {
int rent = getInputValue(rentInput);
int groceries = getInputValue(groceriesInput);
int bills = getInputValue(billsInput);
int transport = getInputValue(transportInput);
totalExpenses = rent + groceries + bills + transport;
Toast.makeText(getContext(), "Total Expenses: ₹" + totalExpenses, Toast.LENGTH_SHORT).show();
// Sending expenses to IncomeFragment
Bundle bundle = new Bundle();
bundle.putInt("totalExpenses", totalExpenses);
IncomeFragment incomeFragment = new IncomeFragment();
incomeFragment.setArguments(bundle);
requireActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, incomeFragment)
.commit();
});
}
private int getInputValue(EditText editText) {
String text = editText.getText().toString();
return text.isEmpty() ? 0 : Integer.parseInt(text);
}
}
expenseadapter.xml
ExpenseAdapter (XML)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="20dp">
<EditText
android:id="@+id/rent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Rent"
android:inputType="number" />
<EditText
android:id="@+id/groceries"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Groceries Expense"
android:inputType="number" />
<EditText
android:id="@+id/bills"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Bills Expense"
android:inputType="number" />
<EditText
android:id="@+id/transport"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Enter Transport Expense"
android:inputType="number" />
<Button
android:id="@+id/calculateButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Calculate Expenses"
android:backgroundTint="@color/black"
android:textColor="@android:color/white"
android:layout_marginTop="20dp"/>
</LinearLayout>
summary.java
Summary.java
package com.example.expensetracker;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class SummaryActivity extends AppCompatActivity {
private TextView summaryText;
private int totalIncome, totalExpenses;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_summary);
summaryText = findViewById(R.id.summaryText);
// Receiving data from IncomeFragment
Intent intent = getIntent();
if (intent != null) {
totalIncome = intent.getIntExtra("totalIncome", 0);
totalExpenses = intent.getIntExtra("totalExpenses", 0);
}
int difference = totalIncome - totalExpenses;
Toast.makeText(this, "Remaining Balance: ₹" + difference, Toast.LENGTH_LONG).show();
summaryText.setText("Income: ₹" + totalIncome + "\nExpenses: ₹" + totalExpenses+"\nBalance: "+difference);
}
}
summary.xml
Summary (XML)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/summaryText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Summary"
android:textSize="18sp"
android:textStyle="bold"/>
</LinearLayout>
Top comments (0)