diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 497e69a30d2e3148e20ee25c48d931ee8caeb56e..d73827b90f37a8647c087fb2ac478c2aab77a0e6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -24,6 +24,9 @@
         <activity
             android:name=".AddTransactionActivity"
             android:exported="false"/>
+        <activity
+            android:name=".EditTransactionActivity"
+            android:exported="false"/>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt b/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5606ede65b8da631bc51b5024b1e7c5ff9ef8537
--- /dev/null
+++ b/app/src/main/java/com/onionsquad/bondoman/EditTransactionActivity.kt
@@ -0,0 +1,79 @@
+package com.onionsquad.bondoman
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.ViewModelProvider
+import com.onionsquad.bondoman.databinding.ActivityEditTransactionBinding
+import com.onionsquad.bondoman.repository.TransactionRepository
+import com.onionsquad.bondoman.room.TransactionCategory
+import com.onionsquad.bondoman.room.TransactionDatabase
+import com.onionsquad.bondoman.room.TransactionEntity
+import com.onionsquad.bondoman.ui.transaction.TransactionViewModel
+import com.onionsquad.bondoman.ui.transaction.TransactionViewModelFactory
+import java.util.Date
+
+class EditTransactionActivity : AppCompatActivity() {
+    private lateinit var binding: ActivityEditTransactionBinding
+    private val database by lazy { TransactionDatabase.getInstance(this) }
+    private val repository by lazy { TransactionRepository(database.transactionDao()) }
+    private lateinit var viewModel: TransactionViewModel
+
+    private var transactionId: Int = -1
+    private var transactionDate: Date = Date()
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        binding = ActivityEditTransactionBinding.inflate(layoutInflater)
+        setContentView(binding.root)
+
+        val factory = TransactionViewModelFactory(repository)
+        viewModel = ViewModelProvider(this, factory)[TransactionViewModel::class.java]
+
+        transactionId = intent.getIntExtra("transactionId", -1)
+        if (transactionId != -1) {
+            viewModel.getTransactionById(transactionId).observe(this) { transaction ->
+                if (transaction != null) {
+                    binding.titleEditText.setText(transaction.title)
+                    binding.amountEditText.setText(transaction.amount.toString())
+                    when (transaction.category) {
+                        TransactionCategory.INCOME -> binding.incomeRadioButton.isChecked = true
+                        TransactionCategory.OUTCOME -> binding.outcomeRadioButton.isChecked = true
+                        else -> {
+
+                        }
+                    }
+                    binding.locationEditText.setText(transaction.location)
+                    transactionDate = transaction.date
+                }
+            }
+        }
+
+        binding.saveButton.setOnClickListener {
+            val title = binding.titleEditText.text.toString()
+            val amount = binding.amountEditText.text.toString().toDoubleOrNull() ?: 0.0
+            val selectedCategoryId = binding.categoryRadioGroup.checkedRadioButtonId
+            val category = when (selectedCategoryId) {
+                R.id.incomeRadioButton -> TransactionCategory.INCOME
+                R.id.outcomeRadioButton -> TransactionCategory.OUTCOME
+                else -> TransactionCategory.OUTCOME
+            }
+            val location = binding.locationEditText.text.toString()
+
+            val updatedTransaction = TransactionEntity(
+                id = transactionId,
+                title = title,
+                amount = amount,
+                category = category,
+                date = transactionDate,
+                location = location
+            )
+
+            viewModel.updateTransaction(updatedTransaction)
+
+            Intent(this@EditTransactionActivity, MainActivity::class.java).also {
+                startActivity(it)
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt
index 6d31c4ab7d591d2cb2a82a8c5af4fcd690fbeee8..f284dfb547caa702a574fab60db157775cb6c4f9 100644
--- a/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/repository/TransactionRepository.kt
@@ -17,4 +17,8 @@ class TransactionRepository(private val transactionDao: TransactionDao) {
     suspend fun deleteTransaction(transaction: TransactionEntity) {
         transactionDao.deleteTransaction(transaction)
     }
+
+    fun getTransactionById(id: Int): LiveData<TransactionEntity> {
+        return transactionDao.getTransactionById(id)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt
index 35e64cc4e012610fb9739a15fc9e6a5132680f45..5eeeedb3bfe998598bd1cf3d29b2171e661ee551 100644
--- a/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/room/TransactionDao.kt
@@ -16,4 +16,7 @@ interface TransactionDao {
 
     @Delete
     suspend fun deleteTransaction(transaction: TransactionEntity)
+
+    @Query("SELECT * FROM transactions WHERE id = :id")
+    fun getTransactionById(id: Int): LiveData<TransactionEntity>
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt
index 11d9bfd2ba181b7c590583959b7eafd6a14f76aa..b39a926ac4c347ae5a3e08f8d1763d99622c9af9 100644
--- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionAdapter.kt
@@ -1,8 +1,10 @@
 package com.onionsquad.bondoman.ui.transaction
 
+import android.content.Intent
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import androidx.recyclerview.widget.RecyclerView
+import com.onionsquad.bondoman.EditTransactionActivity
 import com.onionsquad.bondoman.databinding.TransactionCardBinding
 import com.onionsquad.bondoman.room.TransactionEntity
 
@@ -14,7 +16,7 @@ class TransactionAdapter(
     inner class ViewHolder(private val binding: TransactionCardBinding) : RecyclerView.ViewHolder(binding.root) {
         fun bind(transaction: TransactionEntity) {
             binding.titleTextView.text = transaction.title
-            binding.amountTextView.text = transaction.amount.toString()
+            binding.amountTextView.text = "IDR ".plus(transaction.amount)
             binding.categoryTextView.text = transaction.category.toString()
             binding.dateTextView.text = transaction.date.toString()
             binding.locationTextView.text = transaction.location
@@ -22,6 +24,11 @@ class TransactionAdapter(
             binding.deleteButton.setOnClickListener {
                 viewModel.deleteTransaction(transaction)
             }
+            binding.editButton.setOnClickListener {
+                val intent = Intent(binding.root.context, EditTransactionActivity::class.java)
+                intent.putExtra("transactionId", transaction.id)
+                binding.root.context.startActivity(intent)
+            }
         }
     }
 
diff --git a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
index cf96283f3289be47bfd3205f7e6faa0ac4467748..e34a11eb51d9dcf434b68e8089586dab0911a7a2 100644
--- a/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
+++ b/app/src/main/java/com/onionsquad/bondoman/ui/transaction/TransactionViewModel.kt
@@ -21,4 +21,8 @@ class TransactionViewModel(private val repository : TransactionRepository) : Vie
     fun deleteTransaction(transaction: TransactionEntity) = viewModelScope.launch {
         repository.deleteTransaction(transaction)
     }
+
+    fun getTransactionById(id: Int): LiveData<TransactionEntity> {
+        return repository.getTransactionById(id)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_edit_transaction.xml b/app/src/main/res/layout/activity_edit_transaction.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b23b5075a31acd86cc49cdd54a73576f5b219d7
--- /dev/null
+++ b/app/src/main/res/layout/activity_edit_transaction.xml
@@ -0,0 +1,66 @@
+<?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:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Edit Transaksi"
+        android:textSize="24sp"
+        android:textStyle="bold" />
+
+    <EditText
+        android:id="@+id/titleEditText"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:hint="Judul"
+        android:inputType="text" />
+
+    <EditText
+        android:id="@+id/amountEditText"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:hint="Nominal"
+        android:inputType="numberDecimal" />
+
+    <RadioGroup
+        android:id="@+id/categoryRadioGroup"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:orientation="horizontal">
+
+        <RadioButton
+            android:id="@+id/incomeRadioButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Pemasukan" />
+
+        <RadioButton
+            android:id="@+id/outcomeRadioButton"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="Pengeluaran" />
+    </RadioGroup>
+
+    <EditText
+        android:id="@+id/locationEditText"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="8dp"
+        android:hint="Lokasi"
+        android:inputType="text" />
+
+    <Button
+        android:id="@+id/saveButton"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:text="Simpan" />
+
+</LinearLayout>
\ No newline at end of file