Java Forum @ javaCore.de Foren-Übersicht
 
Anzeige

Stellenanzeigen oder Produkte prominent darstellen?
Machen Sie HIER auf sich aufmerksam!


(Für MediaSpecs bzw. Anfragen und Preise genügt eine eMail)
  Home     Wiklet     Chat     Übersicht     FAQ     Suchen     Login     Registrieren  

[TIP] Eigende Adapter schreiben

 
Neues Thema eröffnen   Neue Antwort erstellen    Java Forum @ javaCore.de Foren-Übersicht » Android
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mac_systems
Senior-Moderator


Anmeldungsdatum: 24.11.2003
Beiträge: 6094
Wohnort: Düsseldorf

BeitragVerfasst am: Do Jul 09, 2009 12:29 pm    Titel: [TIP] Eigende Adapter schreiben Antworten mit Zitat


Heute mal ein Bsp. wie eine ListActivity dazu überredet werden kann mit euren Objekten umzugehen.

Zur Darstellung von Listen habe Ich eine einfache ListActivity geschrieben in der momentan dummy Objekte erzeugt werden um diese in einer List darzustellen.



Java:
/**
 * @author mac
 *
 */

public class SpotOverview extends ListActivity
{
        /*
        * (non-Javadoc)
        *
        * @see android.app.Activity#onCreate(android.os.Bundle)
        */

        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.spotoverview);

                final List<SpotConfigurationVO> spotConfigurations = new ArrayList<SpotConfigurationVO>();

                for (int i = 0; i < 10; i++)
                {
                        final SpotConfigurationVO vo = new SpotConfigurationVO();
                        vo.setFromDirection(WindDirection.E);
                        vo.setToDirection(WindDirection.W);
                        vo.setStation(new Station("Test Station", "id", "keyword", true, true));
                        vo.setPreferredWindUnit(WindUnit.KNOTS);
                        spotConfigurations.add(vo);
                }

                final SpotOverviewAdapter adapter = new SpotOverviewAdapter(this, R.layout.custom_listview_spotoverview,
                                spotConfigurations);

                setListAdapter(adapter);
        }
}


Das eigentliche Layout dieser Activity definieren wir hier:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">


        <ListView
                android:id="@+id/android:list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" />


        <TextView
                android:id="@+id/android:empty"
                android:text="@string/no_entrys"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" />


</LinearLayout>



Der Eintrag mit folgender ID ist wichtig: android:id="@+id/android:empty"
Da er intern genutzt wird falls die Liste leer sein sollte. Würden wir dem TextView nun einen Text im Layout mitgeben würde dieser nur gezeigt falls die List leer ist.


Nun erzeugen wir ein Layout für jeden Eintrag in unserer Liste:

XML:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">


        <TextView
                android:id="@+id/custom_spotoverview_name"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:textSize="20sp" />


        <LinearLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="horizontal"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">


                <TextView
                        android:id="@+id/custom_spotoverview_tralala"
                        android:text="@string/no_entrys"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                <ImageView
                        android:id="@+id/custom_spotoverview_wind_from"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />


                <ImageView
                        android:id="@+id/custom_spotoverview_wind_to"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />


        </LinearLayout>
</LinearLayout>




Wir haben gerade eine Zeile Text der größe 20sp (Scaled Pixel) definiert, darunter einen TextView neben dem zwei ImageViews sich befinden.

Um nun auf einzelne Einträge der Liste zuzugreifen zu können und gleichzeitig mit dem SpotConfigurationVO Objekt arbeiten zu können brauchen wir einen Adapter:

Java:
public class SpotOverviewAdapter extends BaseAdapter


Adapter haben die Aufgabe Inkompatible Schnittstellen kompatibel zu bekommen (Das Adapter Pattern). Damit eine ListActivity ihren Adapter auch kennt haben wir ihn weiter oben gesetzt:

Java:
                final SpotOverviewAdapter adapter = new SpotOverviewAdapter(this, R.layout.custom_listview_spotoverview,
                                spotConfigurations);


Un nun schauen wir auf den Adapter:

Java:
/**
 * @author mac
 *
 */

public class SpotOverviewAdapter extends BaseAdapter
{
        private final Context context;
        private final List<SpotConfigurationVO> spotList;
        private final int rowResID;
        private final LayoutInflater layoutInflater;

        /**
        *
        * @param _context
        * @param _rowResID
        * @param _spotList
        */

        public SpotOverviewAdapter(final Context _context, final int _rowResID, final List<SpotConfigurationVO> _spotList)
        {
                context = _context;
                rowResID = _rowResID;
                spotList = _spotList;

                layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        /*
        * (non-Javadoc)
        *
        * @see android.widget.Adapter#getCount()
        */

        public int getCount()
        {
                return spotList.size();
        }

        /*
        * (non-Javadoc)
        *
        * @see android.widget.Adapter#getItem(int)
        */

        public Object getItem(int position)
        {
                return spotList.get(position);
        }

        /*
        * (non-Javadoc)
        *
        * @see android.widget.Adapter#getItemId(int)
        */

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

        /*
        * (non-Javadoc)
        *
        * @see android.widget.Adapter#getView(int, android.view.View,
        * android.view.ViewGroup)
        */

        public View getView(int position, View convertView, ViewGroup parent)
        {
                final SpotConfigurationVO weather = spotList.get(position);
                final View view = layoutInflater.inflate(rowResID, null);

                final TextView spotnameTextView = (TextView) view.findViewById(R.id.custom_spotoverview_name);
                spotnameTextView.setText(weather.getStation().getName());

                final ImageView windFromImageView = (ImageView) view.findViewById(R.id.custom_spotoverview_wind_from);
                windFromImageView.setImageResource(weather.getFromDirection().getImage());

                final ImageView windToImageView = (ImageView) view.findViewById(R.id.custom_spotoverview_wind_to);
                windToImageView.setImageResource(weather.getToDirection().getImage());

                return view;
        }
}


Die Methode public View getView(int position, View convertView, ViewGroup parent) tut den ganzen Trick indem sie den LayoutInflater nutzt um auf das Root View der Listeneinträge zugreift. Von dort aus suchen wir die einzelnen Views (TextView, ImageView) über ihre IDs und rufen geeignete Methoden auf ihnen auf um geben das Root View zurück.

- Mac
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Werbung
Beiträge der letzten Zeit anzeigen:   

Neues Thema eröffnen   Neue Antwort erstellen    Java Forum @ javaCore.de Foren-Übersicht » Android Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001- 2004 phpBB Group
Designed for Trushkin.net | Skins Database

Additional modifications for javaCore.de by Cengiz Sahin

Die Vervielfältigung der auf den Seiten www.javaCore.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254