سؤال

لدي تطبيق Android الذي يعرض رؤية الشبكة التي تظهر:

1

2

3

4

GridView gridview=(GridView)findViewById(R.id.GridView_test);
DataBaseHelper dbhelper=new DataBaseHelper(this);
ArrayList<String> test=new ArrayList<String>(5);
backlinksadapter.add("1");
backlinksadapter.add("2");
backlinksadapter.add("3");
backlinksadapter.add("4");
ArrayAdapter mAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, test);
gridview.setAdapter(mAdapter);

في الوقت الحالي تعمل، ولكن أود أن أعرض مجموعة من الشبكة، 2 أعمدة مع قيم صفيف 2 الأبعاد (شيء مثل GridView في ASP.NET - AS DataSource -).

أود أن أظهر:

1 | الشخص 1.

2 | الشخص 2.

3 | شخص 3

4 | الشخص 4

اي فكرة؟

هل كانت مفيدة؟

المحلول

هل يجب أن يكون عرض الشبكة؟ هل ستعمل ListView؟

كتبت قائمة عرض وإجراءاتها التي تعرض عنصرين في كل صف. لقد بدأت مع SDK المقدمة Simple_List_ITEM_2.xml تخطيط يسرد عنصرين لكل صف، لكنه يضع واحدا فوق الجزء العلوي من آخر (سطرين) مع السطر الثاني باستخدام خط أصغر. ما أردت هو كلا النوعين على نفس الخط، واحد إلى اليمين والآخر إلى اليسار.

أولا نسخت Simple_List_ITEM_2.xml في دليل RES / Layout الخاص بمشروعي تحت اسم جديد وتغيير العقار Android: Mode = "TwoN" إلى "Oneline" مع الاستفادة من اسم عنصر العرض باسم "TwolinelistItem". ثم استبدلت عن العناصر الداخلية مع تلك التي فعلت ما أردت.

في الكود لتهيئة القائمة، قمت بإنشاء Matrixcursor وملأها بالبيانات المطلوبة. لدعم عنصرين، يتطلب كل صف في MatrixCursor ثلاثة أعمدة، واحدة كونها مفتاح أساسي، "_ID"، والعمودين الآخرين يجريون العناصر التي أردت عرضها. أتمكن من استخدام SimpleCursorAdapter لملء وتحكم في ListView.

ملف تخطيط XML الخاص بي:

 <?xml version="1.0" encoding="utf-8"?>
  <TwoLineListItem
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="2dip"
     android:paddingBottom="2dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:mode="oneLine"
  >
<TextView
    android:id="@android:id/text1"
    android:gravity="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
    android:id="@android:id/text2"
    android:gravity="right"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginRight="6dip"
    android:layout_toRightOf="@android:id/text1"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/MainFontColor"
/>
</TwoLineListItem>

لاحظ أنني استخدمت "Left" و "الأيمن" Android: قيم الجاذبية لجعل العنصر الجانبي الأيسر يسار يبرر هذا البند الجانبي الأيمن الذي يبرره. ستحتاج إلى قيم جاذبية مختلفة لتخطيطك بالإضافة إلى أنك ستحتاج إلى خصائص للتحكم في حجم العنصر الجانبي الأيسر الذي لم أحتاج إليه.

الطريقة في فئة قواعد قوائم بلدي تهيئة ListView:

private void initListView()
{
    final String   AuthorName    = "Author: ";
    final String   CopyrightName = "CopyRight: ";
    final String   PriceName     = "Price: ";

    final String[] matrix  = { "_id", "name", "value" };
    final String[] columns = { "name", "value" };
    final int[]    layouts = { android.R.id.text1, android.R.id.text2 };

    MatrixCursor  cursor = new MatrixCursor(matrix);

    DecimalFormat formatter = new DecimalFormat("##,##0.00");

    cursor.addRow(new Object[] { key++, AuthorName, mAuthor });
    cursor.addRow(new Object[] { key++, CopyrightName, mCopyright });
    cursor.addRow(new Object[] { key++, PriceName,
            "$" + formatter.format(mPrice) });

    SimpleCursorAdapter data =
        new SimpleCursorAdapter(this,
                R.layout.viewlist_two_items,
                cursor,
                columns,
                layouts);

    setListAdapter( data );

}   // end of initListView()

المعلمة إلى منشئ matrixcursor هي مجموعة من السلاسل التي تحدد النظام وأسماء الأعمدة في المؤشر. هام: تأكد من إضافة عمود "_ID"، دون أن يرمي MatrixColumn استثناء ويفشل في العمل!

المتغيرات الثلاثة، Mauthor، Mcopyright و Mprice، هي ثلاثة أعضاء بيانات في فئة ListAdaptor الخاصة بي وهي تتم تهيئتها في مكان آخر. في الكود الفعلي الخاص بي، تم تصميم Mauthor بالفعل في هذه الطريقة من قائمة أسماء المؤلفين. تتسلل أسماء المؤلفين إلى سلسلة واحدة باستخدام " n" كفاصل بين الأسماء. يؤدي هذا إلى ظهور أسماء المؤلفين المتعددة على خطوط مختلفة في نفس النص.

المعلمات SimpleCursorAdapter Ctor هي معرف العرض لاستخدامه لكل قائمة صف، المؤشر الذي يحتوي على البيانات، مجموعة من السلاسل حيث يكون كل عنصر اسم العمود من المؤشر (بالترتيب للحصول عليها) و مجموعة معرفات الرؤية لعرضها لاستخدامها لكل عنصر في صف القائمة.

نصائح أخرى

إذا لم تتمكن من العثور على محول موجود لديه هذه الخصائص، فيمكنك إنشاء محول مخصص خاص بك ولديه خريطة عرضها لعرضك.

ال مرحبا، gridview. البرنامج التعليمي يوضح كيفية القيام بذلك.

JRL هو الصحيح، يجب عليك كتابة محول مخصص الخاص بك الذي سيتيح لك التحكم في ما سيتم عرضه في كل صف. قد تجد هذه معاون، مساعد، مفيد، فاعل خير. يمكن العثور على مثال أكثر تقدما هنا http://developerlife.com/tutorials/؟p=327..

إذا كنت لا تريد / تضطر إلى استخدام قائمة يمكن أن تعرض TableLayout بياناتك أيضا. ولكن هذا سيكون النهج اليدوي لأنك يجب أن تملأ كل خلية.

أفضل نجاح.

لماذا لا تنشئ فئة toString() عائدات str(id) + " | " + personName, واستخدامها كطبقة قالب بدلا من String هدف؟

يمكنك ببساطة إضافة هذا في XML Android: Numcolumns = "2"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top