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

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


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

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

- الملف 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>
                                


بحث في الموقع


إشترك للتوصل بالجديد