استخدام خاصية البحث في الأندرويد برمجياً SearchView

بسم الله الرحمن الرحيم

سوف نتعلم في تدوينة اليوم كيفية إستخدام خاصية البحث, وسوف نظيف هذا العنصر بداخل Menu القائمة للتطبيق, واستخدام البحث من داخل ListView

# في البداية شاهد هذه المعاينة السريعة لدرس اليوم :

# ثم سوف نطبق هذا العنصر للتطبيق الذي نعمل عليه وهو تطبيق الطريق إلى النجاح على قناتنا على اليوتيوب, راجع قائمة التشغيل التالية :
https://www.youtube.com/playlist?list=PLNivoV2e4nZWDf3CsL4go0_7sTHqhgmWA

.

نذهب الآن إلى الكلاس الذي نستخدم داخله عنصر اللست فيو, وحسب مثالنا السابق بالفيديوهات . اللست فيو بداخل SubjectList .

ونقوم بإضافة دالة جديدة داخله لعنصر القائمة بالشكل التالي : على أن تكون خارج دالة الاون كريت وداخل الكلاس.

public class SubjectList extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        .....

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_serch, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);

        SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();

        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()))

        SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener()
        {
            @Override
            public boolean onQueryTextChange(String newText)
            {
                // this is your adapter that will be filtered
                adapter.filter(newText);

                return true;
            }
            @Override
            public boolean onQueryTextSubmit(String query)
            {
                // this is your adapter that will be filtered
                adapter.filter(query);

                return true;
            }
        };
        searchView.setOnQueryTextListener(textChangeListener);

        return super.onCreateOptionsMenu(menu);
    }
}

الكود واضح .. عملية ارتباط : ما يهمنا هو إن :

adapter / هو الادبتر المستخدم والمرتبط باللست الفيو خاصتك وحسب مثالنا هو الملف التالي : ListAdapter

ومن داخله طلبنا الدالة : filter وقمنا بتمرار النص الذي يكتبه المستخدم داخلها.

و الآن اذهب إلى الملف ListAdapter أو الملف الذي لديك الادبتر المتحكم باللست فيو لديك, لنضيف داخله الدالة التالية filter :

public class ListAdapter extends BaseAdapter {

    public ListAdapter(Activity context, List<Data> openSite) {
        ...

    }

    @Override
    public int getCount() {
        ...
    }

    @Override
    public Object getItem(int position) {
        ...
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(final int position, View view, ViewGroup parent) {
        ...

        return Item;

    };

    public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        Datalist.clear();
        if (charText.length() == 0) {
            Datalist.addAll(arraylist);
        }
        else
        {
            for (Data wp : arraylist)
            {
                if (wp.getSubject1().toLowerCase(Locale.getDefault()).contains(charText))
                {
                    Datalist.add(wp);
                }
            }
        }
        notifyDataSetChanged();
    }
}

فقط ما تحتاجه هو الدالة filter فالدوال الاخرى موجودة اساساً لديك, لكن ارسلت الكود بهذه الطريقة لتعرف إنه يجب عليك إضافتها دالة منفردة لوحدها ولكن بداخل الكلاس.

فالكود مضمونه هو الارتباط بملف الداتا لديك Datalist وهو الملف Data.java .

يقوم بتفريط ما كتبه المستخدم إلى احرف.

وإن النص الذي كتبه المستخدم إذا كان ولا حرف صفر اي الحالة الافتراضية تظهر جميع عناصر القائمة.

ولكن في حال كتب شيء ما, يقوم بتفريط كذلك احرف اللست فيو, ومقارنتها مع ما كتبه المستخدم ويتم جلب المتطابق بينها .

getSubject1() / هي الدالة التي يتم جلب من الداتا عناصر الاسم التي بالقائمة .. يستخدمها للبحث.

فقط هذا كل شيء ..

 

# لا ننسى إنشاء ملف xml بداخل res/menu وحسب الكود نقوم بتسميته بـ main_serch . ونضع هذا الكود بداخله :

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/search"
        android:title="action_search" // الاسم لا يظهر, بس تظهر الايقونة ولكن ببعض الاجهزة القديمة لا تلقط الصورة فيظهر الاسم
        android:icon="@android:drawable/ic_menu_search" // نستطيع من هنا تغيير ايقونة البحث
        yourapp:showAsAction="ifRoom|collapseActionView" // لكي يظهر عنصر البحث على القائمة مباشرة
        yourapp:actionViewClass="android.support.v7.widget.SearchView" // اجباري لعنصر البحث />
</menu>

 

بالتوفيق لكم جميعاً .. وانتظرونا في المزيد من الدروس, لا تنسوا مشاركة الدرس للاخرين .. وتعليقاتكم تهمنا لتطوير موقعنا وموقعكم اندرودي عربي.

About عبدالقادر عليوي

مواليد 1996 , سوري الجنسية, طالب علم, لدي شغوف كبير في تعلم كل ما يتعلق بالانترنت من تطوير وحماية, أحب القراءة كثيراً .. هدفي نشر العلم بشتى أنواعه ومجالاته, متابع من الدرجة الأولى لـ الدكتور ابراهيم الفقي و الشيخ أحمد ديدات - رحمهم الله -.

Check Also

التقنيات التي نستطيع برمجة تطبيقات والعاب الاندرويد بها

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

تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)

هل لديك تدوينة أو موقع إخباري ؟ أو معرض يعرض الكثير من البيانات من وسائط ؟ وبحاجة لعرضها في تطبيق اندرويد ؟ هذه فرصتك من هنا وللمبتدئين تعلم برمجة تطبيق لمدونتك

عرض صورة في التطبيق من فايربيس

بسم الله الرحمن الرحيم اليوم سيكون شرحنا عن كيفية عرض صورة  في التطبيق من قاعدة …

One comment

  1. مصعب عبد المنعم

    سلام اخي انا عملت تطبيق اندرويد بس ف مشكلتين
    الاولي:لما اعمل بحث ف صندوق البحث واعمل تشغيل للاغنيه اللي انا عايز اسمعا بتشتغل الاولي
    الثانيه:لما اعمل مشاركه للاغنيه م بتعمل مشاركه مش عارف الخطاء وين
    التطبيق عباره عن محاضرات .mp3 ف.list view

ضع بصمتك بتعليق يعبر عن امتنانك

هذا الموقع يستخدم Akismet للحدّ من التعليقات المزعجة والغير مرغوبة. تعرّف على كيفية معالجة بيانات تعليقك.