Notepad application Kaise banaen mobile phone se sketchware Pro me
Rajjak Shah
5 Jan, 2026
Mobile Phone Se Android Notepad Application Kaise Banaye (Sketchware Pro)
Aaj hum apne mobile phone ki madad se ek simple aur professional Android Notepad Application banana sikhne wale hain.
Is tutorial me hum Android application kaise banayi jaati hai, woh bhi step by step detail ke saath samjhenge, taaki beginners ko samajhne me koi dikkat na ho.
Step 1: Sketchware Pro Me Naya Project Banana
Sabse pehle hum Sketchware Pro application ko open karenge. App open hone ke baad plus (+) icon par click karke ek naya project create karenge.
Project create karte waqt application ka naam Notepad rakhenge aur package name com.my.notepad set karenge. Uske baad Save Changes button par click kar denge.
Step 2: Main Screen Ka XML Layout Banana
Project create ho jaane ke baad, screen ke right niche ki taraf ek option dikhai dega. Us option par click karna hai. Iske baad Direct XML Editor par click karenge aur niche diya gaya code wahan paste kar denge.
Ab hum ek dusri screen banayenge jiska naam edit_note.xml rakhenge. Pehle ki tarah hi is screen ke Direct XML Editor me niche diya gaya code paste kar denge.
Itna sab hone ke baad, upar ki taraf jo 3 dot option hai us par click karenge. Fir Java/Kotlin Manager par click karenge.
Yahan humein total 4 Java files banani hongi:
EditNoteActivity.java
MainActivity.java
Note.java
NoteAdapter.java
Ab in sabhi files me unke naam ke according niche diya gaya code paste kar dena hai. Dhyan rahe, har file me usi ka related code paste ho.
Is code ko MainActivity.java Mein pest karna hai
package com.my.notepad;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity
implements NoteAdapter.OnNoteActionListener {
private RecyclerView recyclerViewNotes;
private NoteAdapter noteAdapter;
private List<Note> notes;
private ImageView btnDeleteSelected;
private static final int REQUEST_CODE_ADD_NOTE = 100;
private static final int REQUEST_CODE_EDIT_NOTE = 101;
private static final String FILE_NAME = "notes_data.json";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
notes = new ArrayList<>();
// Load saved notes when app starts
loadNotes();
recyclerViewNotes = findViewById(R.id.recyclerViewNotes);
btnDeleteSelected = findViewById(R.id.btnDeleteSelected);
noteAdapter = new NoteAdapter(notes, this, this);
recyclerViewNotes.setLayoutManager(new LinearLayoutManager(this));
recyclerViewNotes.setAdapter(noteAdapter);
// ADD NOTE BUTTON
findViewById(R.id.fabAdd).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, EditNoteActivity.class);
startActivityForResult(intent, REQUEST_CODE_ADD_NOTE);
}
});
// DELETE SELECTED BUTTON (TOP RIGHT)
btnDeleteSelected.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
noteAdapter.deleteSelected();
btnDeleteSelected.setVisibility(View.GONE);
}
});
}
@Override
protected void onPause() {
super.onPause();
saveNotes(); // Save when app goes to background
}
@Override
protected void onStop() {
super.onStop();
saveNotes(); // Save when app stops
}
// SAVE NOTES TO FILE
private void saveNotes() {
try {
Gson gson = new Gson();
String json = gson.toJson(notes);
FileOutputStream fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
fos.write(json.getBytes());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// LOAD NOTES FROM FILE
private void loadNotes() {
try {
FileInputStream fis = openFileInput(FILE_NAME);
BufferedReader reader = new BufferedReader(new InputStreamReader(fis));
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
reader.close();
fis.close();
String json = stringBuilder.toString();
Gson gson = new Gson();
Type type = new TypeToken<List<Note>>(){}.getType();
List<Note> savedNotes = gson.fromJson(json, type);
if (savedNotes != null) {
notes.clear();
notes.addAll(savedNotes);
}
} catch (Exception e) {
// First time app run, no file exists
notes = new ArrayList<>();
}
}
// NOTE CLICK → OPEN EDIT
@Override
public void onNoteClicked(int position) {
if (position >= 0 && position < notes.size()) {
Intent intent = new Intent(this, EditNoteActivity.class);
intent.putExtra("note_index", position);
intent.putExtra("note_content", notes.get(position).getContent());
startActivityForResult(intent, REQUEST_CODE_EDIT_NOTE);
}
}
// SHOW / HIDE DELETE ICON
@Override
public void onSelectionChanged() {
if (noteAdapter.isAnySelected()) {
btnDeleteSelected.setVisibility(View.VISIBLE);
} else {
btnDeleteSelected.setVisibility(View.GONE);
noteAdapter.exitSelectionMode();
}
}
// NEW METHOD FOR ADAPTER TO CALL
@Override
public void saveNotesFromAdapter() {
saveNotes();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null) {
String savedNote = data.getStringExtra("saved_note");
if (savedNote == null) savedNote = "";
if (requestCode == REQUEST_CODE_ADD_NOTE) {
if (!savedNote.trim().isEmpty()) {
notes.add(new Note(savedNote));
noteAdapter.notifyItemInserted(notes.size() - 1);
saveNotes(); // Save new note
}
} else if (requestCode == REQUEST_CODE_EDIT_NOTE) {
int noteIndex = data.getIntExtra("note_index", -1);
if (noteIndex >= 0 && noteIndex < notes.size()) {
notes.get(noteIndex).setContent(savedNote);
noteAdapter.notifyItemChanged(noteIndex);
saveNotes(); // Save edited note
}
}
}
}
}
Is code ko EditNoteActivity.java Mein pest karna hai
package com.my.notepad;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
public class EditNoteActivity extends AppCompatActivity {
private EditText editTextNote;
private int noteIndex = -1;
private String originalContent = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_note);
editTextNote = findViewById(R.id.editTextNote);
Button btnSave = findViewById(R.id.btnSave);
Intent intent = getIntent();
if (intent != null) {
originalContent = intent.getStringExtra("note_content");
noteIndex = intent.getIntExtra("note_index", -1);
if (originalContent != null) {
editTextNote.setText(originalContent);
editTextNote.setSelection(originalContent.length());
}
}
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String content = editTextNote.getText().toString();
Intent result = new Intent();
result.putExtra("saved_note", content);
result.putExtra("note_index", noteIndex);
setResult(RESULT_OK, result);
finish();
}
});
}
@Override
public void onBackPressed() {
String current = editTextNote.getText().toString();
if (!current.equals(originalContent)) {
Intent result = new Intent();
result.putExtra("saved_note", current);
result.putExtra("note_index", noteIndex);
setResult(RESULT_OK, result);
}
super.onBackPressed();
}
}
Is code ko Note.java Mein pest karna hai
package com.my.notepad;
public class Note {
private String content;
private boolean selected;
// Default constructor required by Gson
public Note() {
}
public Note(String content) {
this.content = content;
this.selected = false;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
}
Is code koNoteAdapter.java Mein pest karna hai
package com.my.notepad;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.NoteViewHolder> {
private List<Note> notes;
private Context context;
private boolean selectionMode = false;
private OnNoteActionListener listener;
public interface OnNoteActionListener {
void onNoteClicked(int position);
void onSelectionChanged();
void saveNotesFromAdapter(); // NEW METHOD ADDED
}
public NoteAdapter(List<Note> notes, Context context, OnNoteActionListener listener) {
this.notes = notes;
this.context = context;
this.listener = listener;
}
@Override
public NoteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.note_item, parent, false);
return new NoteViewHolder(view);
}
@Override
public void onBindViewHolder(final NoteViewHolder holder, final int position) {
if (position < 0 || position >= notes.size()) return;
final Note note = notes.get(position);
String preview = note.getContent();
if (preview == null) preview = "";
if (preview.length() > 50) {
preview = preview.substring(0, 50) + "...";
}
holder.textViewTitle.setText(preview);
holder.indicatorSelected.setVisibility(note.isSelected() ? View.VISIBLE : View.GONE);
// CLICK
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getAdapterPosition();
if (pos == RecyclerView.NO_POSITION) return;
if (selectionMode) {
toggleSelection(pos);
} else {
listener.onNoteClicked(pos);
}
}
});
// LONG CLICK → SELECTION MODE
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int pos = holder.getAdapterPosition();
if (pos == RecyclerView.NO_POSITION) return true;
selectionMode = true;
toggleSelection(pos);
listener.onSelectionChanged();
return true;
}
});
// SINGLE DELETE BUTTON (SAFE)
holder.buttonDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getAdapterPosition();
if (pos == RecyclerView.NO_POSITION) return;
notes.remove(pos);
notifyItemRemoved(pos);
// Call save notes through listener
listener.saveNotesFromAdapter();
if (notes.isEmpty()) {
selectionMode = false;
listener.onSelectionChanged();
}
}
});
}
private void toggleSelection(int position) {
if (position < 0 || position >= notes.size()) return;
Note note = notes.get(position);
note.setSelected(!note.isSelected());
notifyItemChanged(position);
listener.onSelectionChanged();
}
public void exitSelectionMode() {
for (Note note : notes) {
note.setSelected(false);
}
selectionMode = false;
notifyDataSetChanged();
}
// ЁЯФе SAFE MULTI DELETE (NO CRASH)
public void deleteSelected() {
for (int i = notes.size() - 1; i >= 0; i--) {
if (notes.get(i).isSelected()) {
notes.remove(i);
}
}
selectionMode = false;
notifyDataSetChanged();
listener.onSelectionChanged();
// Call save notes through listener
listener.saveNotesFromAdapter();
}
public boolean isAnySelected() {
for (Note note : notes) {
if (note.isSelected()) return true;
}
return false;
}
@Override
public int getItemCount() {
return notes == null ? 0 : notes.size();
}
static class NoteViewHolder extends RecyclerView.ViewHolder {
TextView textViewTitle;
View indicatorSelected;
ImageButton buttonDelete;
NoteViewHolder(View itemView) {
super(itemView);
textViewTitle = itemView.findViewById(R.id.textViewTitle);
indicatorSelected = itemView.findViewById(R.id.indicatorSelected);
buttonDelete = itemView.findViewById(R.id.buttonDelete);
}
}
}
Ab aapko ek dependency bhi add karni padegi right side mein three dot per click karo uske bad library manager per click karo uske bad local library per click karo fir yah dependency add karo
com.google.code.gson:gson:2.10.1
Dependency add karne ke bad ab hamen drawable folder ke andar kuchh filein banani honge
Notepad Application рдХा working process рдмрд╣ुрдд simple рд╣ोрддा рд╣ै। рдЬрдм user app open рдХрд░рддा рд╣ै,
рддो рдЙрд╕े рдПрдХ text area рджिрдЦाрдИ рджेрддा рд╣ै рдЬрд╣ाँ рд╡рд╣ freely text рд▓िрдЦ рд╕рдХрддा рд╣ै।
рдпрд╣ text normally phone рдХी internal storage рдпा app database рдоें save рд╣ोрддा рд╣ै।
Main ek independent content creator hoon jo real users ki daily problems solve karta hai. Mujhe tech aur online information ko simple, practical aur step-by-step tareeke se explain karna pasand hai. Sarkari News & Yojana: Latest sarkari updates, forms aur official information ko verified sources ke saath easy language mein share karta hoon. Sketchware & App Development: Android apps banana Sketchware se sikhata hoon, step-by-step guides aur real examples ke saath, beginners se advanced users ke liye. Mobile Problems & Tech Solutions: Phone issues jaise slow performance, battery drain, login problems aur apps errors ke tested aur safe solutions provide karta hoon. Mera goal hamesha accurate, updated aur user-first content dena hai.