كيفاش نصاوب Notes App

imadbelasri Android
AN

فهاد الدرس من سلسلة الأندرويد غادي نشوفو كيفاش نقادو واحد التطبيق كيمكن المستخدم من إمتلاك مذكرة يسجل فيها المعلومات يعدلهم أو يمسحهم التطبيق بسيط وفمتناول المبتدئين.


نظرة سريعة بالفيديو


- الملف activity_main.xml

أول حاجة غادي نفتح Android Studio وغادي نزيد مشروع جديد نسميه Notes من بعد غادي نمشي ل res/layout/activity_main.xml وغادي نزيد فيه الكود لي غادي يمكني من عرض الرسائل فواحد القائمة فالصفحة الرئيسية الكود ديالو هو :

                                                    
                                                        <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.darijacoding.notes.MainActivity">
    <ListView
        android:id="@+id/notesList"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>
</RelativeLayout>
                                                    
                                                

- الملف activity_modifier_une_note.xml

فنفس المجلد غادي نزيد ملف ونسميه activity_modifier_une_note.xml ولي غادي يمكني من عرض واحد من ل notes لي مسجلين باش نتمكن من التعديل ديالها الكود ديالو :

                                                        
                                                            <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.darijacoding.notes.ModifierUneNote">
    <EditText
        android:id="@+id/noteToUpdate"
        android:gravity="top|left"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>
                                                        
                                                    

- الملف MainActivity.java

فالمجلد java/com.example.darijacoding.notes غادي نمشي للملف MainActivity لي غادي نزيد فيه الكود لي غادي يمكني من عرض لnotes لي مسجلبين عندي فأول حاجة غادي نخدم ب SharedPreferences لي كتمكني من تخزين المعلومات فالداكرة دون فقدانها منبعد كنزيد لnotes يلا كانو مسجلين عندي فواحد الجدول سميتو set من بعد داك الجدول كنزيدو فجدول آخر لي سميتو NotesList لي بإستعمال لadapter كنتمكن من عرضو فالصفحة الرئيسية من بعد كاين الكود لي غادي يمكني من مسح أي note اختاريت بالظغط بشكل مطول عليها وفالآخير كاين الكود ديال الزر + لي كاين فالقائمة لي كيمكني من فتح صفحة جديدة كنمكني من إضافة note جديدة.

                                                        
                                                            package com.example.darijacoding.notes;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemLongClickListener;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {
    private ListView  NotesList;
    static Set<String> set;
    static ArrayAdapter adapter;
    static ArrayList<String> notes = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        NotesList = (ListView) findViewById(R.id.notesList);
        SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.darijacoding.notes", Context.MODE_PRIVATE);
        set = sharedPreferences.getStringSet("notes",null);
        notes.clear();
        if(set != null){
            notes.addAll(set);
        }else{
            notes.add("Exemple note");
            set = new HashSet<String>();
            set.addAll(notes);
            sharedPreferences.edit().putStringSet("notes",set).apply();
        }
        adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,notes);
        NotesList.setAdapter(adapter);
        NotesList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                Intent i = new Intent(getApplicationContext(),ModifierUneNote.class);
                i.putExtra("noteId",position);
                startActivity(i);
            }
        });
        NotesList.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> adapterView, View view,final int position, long l) {
                new AlertDialog.Builder(MainActivity.this)
                        .setIcon(android.R.drawable.ic_dialog_info)
                        .setTitle("Êtes vous sûr ?")
                        .setMessage("Voulez vous vraiment supprimer cette note ?")
                        .setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                notes.remove(position);
                                SharedPreferences sharedPreferences = MainActivity.this.getSharedPreferences("com.example.darijacoding.notes", Context.MODE_PRIVATE);
                                if(MainActivity.set == null){
                                    MainActivity.set = new HashSet<String>();
                                }else{
                                    MainActivity.set.clear();
                                }
                                set.addAll(notes);
                                sharedPreferences.edit().remove("notes").apply();
                                sharedPreferences.edit().putStringSet("notes",set).apply();
                                adapter.notifyDataSetChanged();
                            }
                        }).setNegativeButton("Non",null).show();

                return true;
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        int id = item.getItemId();
        if(id == R.id.add){
            notes.add("");
            SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.darijacoding.notes", Context.MODE_PRIVATE);
            if(set == null){
                set = new HashSet<String>();
            }else{
                set.clear();
            }
            set.addAll(notes);
            sharedPreferences.edit().remove("notes").apply();
            sharedPreferences.edit().putStringSet("notes",set).apply();
            Intent i = new Intent(getApplicationContext(),ModifierUneNote.class);
            i.putExtra("noteId",notes.size()-1);
            startActivity(i);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

                                                        
                                                    

- الملف ModifierUneNote

فالمجلد java/com.example.darijacoding.notes غادي نزيد الملف ModifierUneNote لي غادي يمكني من تعديل واحدة من notes لي اختاريت ولي كتزاد فواحد ل EditText من بعد مكتعرف بإستعمال id ديالها الكود ديال الملف هو:

                                                        
                                                            package com.example.darijacoding.notes;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class ModifierUneNote extends AppCompatActivity implements TextWatcher {
    private EditText noteUpdateTxt;
    int noteId;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_modifier_une_note);
        noteUpdateTxt = (EditText) findViewById(R.id.noteToUpdate);
        Intent i = getIntent();
        noteId = i.getIntExtra("noteId",-1);
        if(noteId != -1){
            noteUpdateTxt.setText(MainActivity.notes.get(noteId));
        }
        noteUpdateTxt.addTextChangedListener(this);
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        MainActivity.notes.set(noteId,String.valueOf(charSequence));
        MainActivity.adapter.notifyDataSetChanged();
        SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.darijacoding.notes", Context.MODE_PRIVATE);
        if(MainActivity.set == null){
            MainActivity.set = new HashSet<String>();
        }else{
            MainActivity.set.clear();
        }
        MainActivity.set.addAll(MainActivity.notes);
        sharedPreferences.edit().remove("notes").apply();
        sharedPreferences.edit().putStringSet("notes",MainActivity.set).apply();
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
}

                                                        
                                                    

- الملف main_menu.xml

آخر ملف كاين ف menu/main_menu.xml وهو لي كيمكني من إضافة قائمة فيها زر + لي كيمكني من إضافة note جديدة الكود ديالو هو :

                                                        
                                                            <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/add"
        android:showAsAction="always"
        android:title="+"
        tools:ignore="AppCompatResource">
        <!-- "file" submenu -->u>
    </item>
</menu>
                                                        
                                                    

دروس ذات صلة

AN

كيفاش نصاوب آلة حاسبة ب Android

فهاد الدرس من سلسلة Android غادي نشوفو كيفاش نقادو واحد الآلة حاسبة بسيطة غادي تمكنا من القيام بع...


AN

كيفاش نصاوب Notes App

فهاد الدرس من سلسلة الأندرويد غادي نشوفو كيفاش نقادو واحد التطبيق كيمكن المستخدم من إمتلاك مذكرة يسج...


AN

كيفاش تصاوب Scanner Mood بالاندرويد

فهاد الدرس من سلسلة الاندرويد غادي نشوفو كيفاش نقادو واحد التطبيق كيمكن المستخدم من التعرف على الحا...


AN

كيفاش تصوب لعبة Brain Train بالاندرويد

فهاد الدرس من سلسلة الأندرويد غادي نشوفو كيفاش نصاوبو واحد اللعبة بسيطة سميتها Brain Train لعبة بسي...


AN

كيفاش نصاوب Contacts App بالأندرويد الجزء الاول

فهاد الدرس من سلسلة الاندرويد غادي نقادو واحد التطبيق كيمكن من تسجيل Contacts فقاعدة البيانات كما ك...


AN

كيفاش نصاوب Contacts App بالأندرويد الجزء الثاني

فهاد الجزء الثاني من هاد الدرس غادي نكملو الملفات الأخرى ولي غادي تمكن التطبيق ديالنا من الإشتغال ول...


AN

كيفاش تستعمل Volley باش ترسل البيانات الجزء الأول

فهاد الدرس من سلسلة الاندرويد غادي نشوفو كيفاش نستعملو ل volley library باش نديرو إتصال مع قاعدة بي...


AN

كيفاش تستعمل Volley باش ترسل البيانات الجزء الثاني

فهاد الجزء الثاني من هاد المشروع غادي نقادو الملفات لي غادي يمكننا من الإتصال بقاعدة البيانات والكود...


AN

كيفاش تستعمل Volley باش ترسل البيانات الجزء الثالت

فهاد الجزء الثالث من هاد المشروع غادي نزيدو واحد الدومين لي غادي يكون مجاني وغادي يعطينا واحد العنو...


AN

كيفاش تصاوب تطبيق Top 10 Downloads ب Android

فهاد الدرس غادي نصابو مشروع بسيط بandroid عبارة عن تطبيق كيعرض قائمة أفضل عشر تطبيقات مجانية فمتجر آ...