كيف يمكنني ملء قائمة ListView (في Android) مع بيانات XML أو JSON؟
-
19-09-2019 - |
سؤال
قرأت برنامج تعليمي، ويستخدم SQLLITE و "SimpleCursorAdapter" لملء القائمة مع العناصر. هذا هو رمز تعليمي البرنامج التعليمي.
private void fillData() {
// Get all of the notes from the database and create the item list
Cursor c = mDbHelper.fetchAllNotes();
startManagingCursor(c);
String[] from = new String[] { NotesDbAdapter.KEY_TITLE };
int[] to = new int[] { R.id.text1 };
// Now create an array adapter and set it to display using our row
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to);
setListAdapter(notes);
}
ومع ذلك ... ماذا لو كنت أريد ملء بيانات XML؟ هل هي نفس الطريقة؟ هل يمكن لشخص أن يعطيني مثالا (في التعليمات البرمجية)؟ شكرا.
المحلول
المثال يستخدم CursorAdapter
لأن أ Cursor
يتم إرجاع الكائن من قبل NotesDbAdapter
(إذا كنت أتذكر بشكل صحيح ) fetchAllNotes
طريقة. لا أعرف إذا كانت هناك طريقة لتمريرها في XML RAW لإنشاء قائمة ولكن يمكنك استخدام أزواج الاسم / القيمة في HashMap
لإنشاء قائمة باستخدام SimpleilistAdapter.
يمكنك تحليل XML الخاص بك و JSON وبناء طاولة تجزئة معها واستخدام ذلك لتعبئة القائمة. المثال التالي لا يستخدم XML، في الواقع، إنه ليس ديناميكيا على الإطلاق، لكنه يظهر كيفية تجميع قائمة في وقت التشغيل. انها مأخوذة من onCreate
طريقة النشاط الذي يمتد ListActivity
. وبعد جميع القيم الكبيرة هي سلاسل ثابتة ثابتة محددة في الجزء العلوي من الفصل، وتستخدم كمفاتيح.
// -- container for all of our list items
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
// -- list item hash re-used
Map<String, String> group;
// -- create record
group = new HashMap<String, String>();
group.put( KEY_LABEL, getString( R.string.option_create ) );
group.put( KEY_HELP, getString( R.string.option_create_help ) );
group.put( KEY_ACTION, ACTION_CREATE_RECORD );
groupData.add(group);
// -- geo locate
group = new HashMap<String, String>();
group.put( KEY_LABEL, getString(R.string.option_geo_locate ) );
group.put( KEY_HELP, getString(R.string.option_geo_locate_help ) )
group.put( KEY_ACTION, ACTION_GEO_LOCATE );
groupData.add( group );
// -- take photo
group = new HashMap<String, String>();
group.put( KEY_LABEL, getString( R.string.option_take_photo ) );
group.put( KEY_HELP, getString(R.string.option_take_photo_help ) );
group.put( KEY_ACTION, ACTION_TAKE_PHOTO );
groupData.add( group );
// -- create an adapter, takes care of binding hash objects in our list to actual row views
SimpleAdapter adapter = new SimpleAdapter( this, groupData, android.R.layout.simple_list_item_2,
new String[] { KEY_LABEL, KEY_HELP },
new int[]{ android.R.id.text1, android.R.id.text2 } );
setListAdapter( adapter );