Autore Topic: DataGridView 100x100 Scroll  (Letto 433 volte)

Offline trisgerra92

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy SIII, LG E610, Motorola Blur, Galaxy SIII Mini, Galaxy Nexus
  • Sistema operativo:
    Mac OSX
DataGridView 100x100 Scroll
« il: 17 Aprile 2013, 11:46:33 CEST »
0
Ciao ragazzi, ho bisogno di realizzare una tabella bidimensionale (100 colonne x 100 righe) scrollabile sia in modo orizzontale che verticale, (anche se non è perfettamente corretto avere un activity così grande, devo comunque farla cosi).
Sono riuscito a far funzionare la tabella su dispositivi con android 2.2 e 2.3 ma dalla 3.0 mi ritrovo dei problemi di lentezza quando scrollo in verticale.
Questo mi fà pensare che scorrendo la tabella in modo verticale, viene caricata in memoria tutta la riga (100 elementi) e la conseguenza è un'effetto "Lag" sullo scroll.

Per la realizzazione ho creato un HorizontalScrollView all'interno del quale ho inserito una GridView.

Qualcuno riesce a darmi un consiglio su come poter risovlere questo problema di lentezza?

MinSDK del progetto: "8"
TargetSDK "14"

Vi allego il main.xml:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="#eeeeee"
   android:orientation="vertical" >

    <HorizontalScrollView
       android:id="@+id/horizScroll"
       android:layout_width="200dp"
       android:layout_height="195dp"
       android:layout_marginLeft="8dp"
       android:layout_marginRight="8dp"
       android:layout_marginTop="5dp"
       android:fillViewport="true"
       android:layout_gravity="center_horizontal"
       >

        <TableLayout
           android:layout_width="match_parent"
           android:layout_height="match_parent"
           android:paddingRight="2dip" >

            <TableRow
               android:id="@+id/rowHeader"
               android:layout_width="fill_parent"
               android:layout_height="15dp" >
            </TableRow>

            <com.jess.ui.TwoWayGridView
               xmlns:android="http://schemas.android.com/apk/res/android"
               xmlns:app="http://schemas.android.com/apk/res-auto"
               android:id="@+id/gridView1"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:isScrollContainer="true"
               app:columnWidth="27dp"
               app:gravity="center"
               app:horizontalSpacing="4dp"
               app:numColumns="50"
               app:numRows="50"
               app:scrollDirectionLandscape="vertical"
               app:scrollDirectionPortrait="vertical"
               app:stretchMode="columnWidth"
               app:verticalSpacing="4dp" >
            </com.jess.ui.TwoWayGridView>
        </TableLayout>
    </HorizontalScrollView>

    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <TextView
           android:id="@+id/textView1"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:text="Heading Color"
           android:textColor="#000000"
           android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <LinearLayout
       android:id="@+id/btnlayFirst"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <Button
           android:id="@+id/btnBlack"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Black"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnRed"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Red"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnBlue"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Blue"
           android:textSize="10sp" />
    </LinearLayout>

    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <TextView
           android:id="@+id/textView2"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:text="Char Style"
           android:textColor="#000000"
           android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <LinearLayout
       android:id="@+id/btnlaySecond"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <Button
           android:id="@+id/btnArial"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Normal"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnCourier"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Italic"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnNote"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Bold"
           android:textSize="10sp" />
    </LinearLayout>

    <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <TextView
           android:id="@+id/textView3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:text="Text Size"
           android:textColor="#000000"
           android:textAppearance="?android:attr/textAppearanceLarge" />
    </LinearLayout>

    <LinearLayout
       android:id="@+id/btnlayThird"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal" >

        <Button
           android:id="@+id/btnSmall"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Small"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnMedium"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Medium"
           android:textSize="10sp" />

        <Button
           android:id="@+id/btnLarge"
           android:layout_width="85dp"
           android:layout_height="wrap_content"
           android:text="Large"
           android:textSize="10sp" />
    </LinearLayout>

</LinearLayout>


e i metodi per popolare la griglia:
Codice (Java): [Seleziona]
//METODO B) POPOLAZIONE GRIGLIA IN MainActivity
        public void populateGrid(int numOfElements, int fontSel, int fontSize) {
                ProgressDialog progress=ProgressDialog.show(this, "Loading", "");
                for (int i = 0 ; i < numOfElements; i++) {
                        number.add(""+i);
                }
                grid.setAdapter(new StringAdapter(this, number, fontSel, fontSize));
                progress.dismiss();
        }

getView() in StringAdapter.java
Codice (Java): [Seleziona]
        public View getView(int position, View convertView, ViewGroup parent) {

                LayoutInflater inflater = (LayoutInflater) context
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                if (convertView == null) {
                        gridView = new View(context);
                        // get layout from mobile.xml
                        gridView = inflater.inflate(R.layout.mobile, null);

                } else {
                        gridView= convertView;
                }
                textView = (TextView) gridView
                                .findViewById(R.id.grid_item_label);
                textView.setText(mobileValues.get(position).toString());
                checkFontSelected(typeFace,typeSize, textView);

                return gridView;}
« Ultima modifica: 17 Aprile 2013, 12:12:49 CEST da trisgerra92 »