12 – اندرويد : التنسيقات الديناميكية ListView

ملاحظة : الموضوع عبارة عن حلقة من حلقات سلسلة برمجة وتطوير اندرويد Android Development

اندرويد : التنسيقات الديناميكية ListView

السلام عليكم ورحمة الله وبركاته

سنتعلم اليوم بعض المعلومات حول التنسيق من نمط List View, وإذا كنتم تذكرون من دروس سابقة , فإن هذا النمط من التنسيق يستخدم عندما تكون محتويات الشاشة محتويات ديناميكية لا يمكن التكهن بها أو بنائها إلى في زمن التنفيذ, وlistView هو من التنسيقات المدعومة من قبل المحول adapter . للمراجعة بالامكان قراءة الدرس التاسع من السلسلة بعنوان تنسيقات واجهة المستخدم ضمن اندرويد UI Layouts

ملاحظة : هنا سيتم اعطاء لمحة عن ListView لانه يستحق شرح اكثر بكثير من الشرح الوارد هنا , ولكن على سبيل الذكر سيتم شرحه بشكل مقتطف جدا , إلى ان تتم العودة لهذا الموضوع لاحقا ويتم شرحه بالتفصيل , لذا ارجو ان تتجاوزا الموضوع في حال وجدتم بعض الصعبوبات في فهمه.

تشمل معلومات الدرس مايلي :

ضمن هذه الحلقة سوف نتعلم مايلي:

  1. استخدام المحمل Loader
  2. مثال

التnew profنسيق  List View

تعتبر ListView عبارة عن view group تقوم بعرض قائمة عناصر مزودة بشريط منزلق.

يتم ادراج هذه العناصر بشكل اتوماتيكي ضمن القائمة عبر استخدام Adapter (محول) الذي يقوم بدوره بسحب المحتويات والمعطيات من مصدر ما مثل مصفوفة او استعلام من قاعدة المعطيات ويحول كل عنصر إلى view ويتم توضيعه في مكانة المناسب ضمن القائمة.

لتتعلم كيف بإمكانك بشكل ديناميكي ادراج ال views باستخدام المحولة adapter , عليك بقراءة الرابط التالي : Building Layouts with an Adapter

listview

استخدام المحمل using a loader

يتم استخدام CursorLoader كطريقة معيارية للاستعلام من Cursor بشكل غير متزامن لكي نتجنب حجب مسرى التطبيق app’s thread عبر هذا الاستعلام.

عندما يتلقى CursorLoader النتائج من Cursor, عندها فإن LoaderCallbacks يتلقى استدعاء ل onLoadFinished() , وهو المكان الذي تحدث فيه المحولة adapter  بالنتائج الجديدة القادمة من Cursor , ومن ثم تقوم ال List view بعرض النتائج.

بالرغم من ان واجهات ال CursorLoader APIs تم طرحها ضمن الاصدار 3 من اندرويد(APIlevel 11), ولكنهم ايضا متاحين ضمن مكاتب الدعم Support Library وبالتالي فإنه بإمكان تطبيقك استخدامهم عند استخدام اجهزة تدعم اصدار اندرويد 1.6 أو اعلى.

لمزيد من المعلومات حول “المحمل” Loader لتحميل المعطيات بشكل غير متزامن, راجع الدليل Loaders.

listViewAdapter0

مثال:

يستخدم المثال التالي ListActivity, وهي عبارة عن صف فعالية مشتق من الصف activity وهو مصمم للتعامل ببساطة مع ListView ويتضمن ListView بمثابة عنصر التنسيق الوحيد لديها بشكل افتراضي.وتقوم بالاستعلام من Contacts Provider للحصول على قائمة من اسماء وارقام الهواتف.

تقوم الفعالية تحقيق (تنجيز implement) الواجهة LoaderCallbacks interface وذلك لكي تستخدم CursorLoader الذي يقوم بشكل ديناميكي بتحميل المعطيات من اجل list view.

public class ListViewLoader extends ListActivity

implements LoaderManager.LoaderCallbacks<Cursor> {

// This is the Adapter being used to display the list’s data

SimpleCursorAdapter mAdapter;

// These are the Contacts rows that we will retrieve

static final String[] PROJECTION = new String[] {ContactsContract.Data._ID,

ContactsContract.Data.DISPLAY_NAME};

// This is the select criteria

static final String SELECTION = “((” +

ContactsContract.Data.DISPLAY_NAME + ” NOTNULL) AND (” +

ContactsContract.Data.DISPLAY_NAME + ” != ” ))”;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// Create a progress bar to display while the list loads

ProgressBar progressBar = new ProgressBar(this);

progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,

LayoutParams.WRAP_CONTENT, Gravity.CENTER));

progressBar.setIndeterminate(true);

getListView().setEmptyView(progressBar);

// Must add the progress bar to the root of the layout

ViewGroup root = (ViewGroup) findViewById(android.R.id.content);

root.addView(progressBar);

// For the cursor adapter, specify which columns go into which views

String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};

int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1

// Create an empty adapter we will use to display the loaded data.

// We pass null for the cursor, then update it in onLoadFinished()

mAdapter = new SimpleCursorAdapter(this,

android.R.layout.simple_list_item_1, null,

fromColumns, toViews, 0);

setListAdapter(mAdapter);

// Prepare the loader.  Either re-connect with an existing one,

// or start a new one.

getLoaderManager().initLoader(0, null, this);

}

// Called when a new Loader needs to be created

public Loader<Cursor> onCreateLoader(int id, Bundle args) {

// Now create and return a CursorLoader that will take care of

// creating a Cursor for the data being displayed.

return new CursorLoader(this, ContactsContract.Data.CONTENT_URI,

PROJECTION, SELECTION, null, null);

}

// Called when a previously created loader has finished loading

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

// Swap the new cursor in.  (The framework will take care of closing the

// old cursor once we return.)

mAdapter.swapCursor(data);

}

// Called when a previously created loader is reset, making the data unavailable

public void onLoaderReset(Loader<Cursor> loader) {

// This is called when the last Cursor provided to onLoadFinished()

// above is about to be closed.  We need to make sure we are no

// longer using it.

mAdapter.swapCursor(null);

}

@Override

public void onListItemClick(ListView l, View v, int position, long id) {

// Do something when a list item is clicked

}

}

ملاحظة : يقوم هذا المثال بتنفيذ استعلام من Contacts Provider , إذا رغبت بتنفيذ هذا الكود , فإنه يتوجب على تطبيقك ان يوقم بطلب صلاحيات ال READ_CONTACTS وذلك ضمن ملف manifest كما يلي :

<uses-permission android:name=”android.permission.READ_CONTACTS” />

اتمنى لكم الفائدة , وإلى اللقاء في الحلقة القادمة والتي تتحدث عن التنسيق الديناميكي الثاني GridView , وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة الله وبركاته.

تحوي سلسلة اندرويد المواضيع التالية :

  1. التعريف باندرويد What is Android
  2. مكونات واجهة المستخدم الاساسية في اندرويد Basic Andorid User Interface Components
  3. خطوات تثبيت اندرويد Android Install Steps
  4. بناء مشروع اندرويد
  5. تشغيل تطبيقك على اندرويد Running Your Application  
  6. بناء واجهة مستخدم بسيطة UI 
  7. تشغيل فعالية أخرى Starting another Activity
  8. بناء مشروع اندرويد – التحويل بين درجات الحرارة Android Temperature Converter
  9. تنسيقات واجهة المستخدم ضمن اندرويد  UI Layouts
  10. اندرويد : التنسيق الخطي LinearLayout
  11. اندرويد : التنسيق النسبي RelativeLayout

Advertisements

, , , , , , , , , , , , , , , , , , , , , , , , , , ,

  1. أضف تعليق

اترك رد

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: