كيفاش نصاوب 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>