Smarthome App #6: Einstellungs-Bildschirm (2/2)

Smarthome App, Tutorial
Teile diesen Beitrag

Im letzten Teil des Tutorials wurde das SettingsFragment designed und auch schon teilweise implementiert, der Rest der Implementierung wird jedoch in diesem Tutorial übernommen. Dabei steht heute unter anderem das Füllen der Liste im Vordergrund.

Das Video zum Tutorial

Damit die Liste mit Werten gefüllt werden kann, wird ein sogenannter Adapter benötigt, der jetzt implementiert wird. Dazu wird die Klasse „SettingsAdapter erstellt“. Füge den folgenden Code in die Klasse „SettingsFragment“ ein:

public class SettingsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
    int lastPosition = -1;

    @Override
    public int getItemCount(){
        return settingItems.size();
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int i){
        if(holder instanceof SettingViewHolder){
            final SettingItem si = settingItems.get(i);
            SettingViewHolder settingViewHolder = (SettingViewHolder) holder;

            settingViewHolder.name.setText(si.getName());

            if(!si.getValue().equals("")){
                settingViewHolder.value.setText(Html.fromHtml(si.getValue()));
            }
            else settingViewHolder.value.setText("");

            settingViewHolder.icon.setImageResource(Icons.getSystemInfoIcon(si.getType()));

            View.OnClickListener ocl = si.getOnClickListener();
            if(ocl != null){
                settingViewHolder.container.setOnClickListener(ocl);
            }

            setAnimation(((SettingViewHolder) holder).container, i);
        }
    }

    public void setAnimation(View viewToAnimate, int position){
        if(position > lastPosition){
            Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.recycler_animation);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType){
        View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.value_item, viewGroup, false);

        return new SettingViewHolder(itemView);
    }

    public class SettingViewHolder extends RecyclerView.ViewHolder{
        protected TextView value, name;
        protected ImageView icon;
        protected View container;

        public SettingViewHolder(View v){
            super(v);

            container = v.findViewById(R.id.container);
            value = (TextView) v.findViewById(R.id.value);
            name = (TextView) v.findViewById(R.id.name);
            icon = (ImageView) v.findViewById(R.id.icon);
        }
    }
}

In der Methode „onBindViewHolder()“ der Klasse „SettingsAdapter“, die jedes Listenelement darstellt, wenn es benötigt wird, wird die Methode „getSystemInfoIcon()“ aufgerufen, die jedoch noch nicht existiert. Dies wird nun geändert. Öffne dazu die Datei mobile -> java -> de.smarthome_blogger.smarthome -> Icons und füge die folgenden neuen Methoden hinzu (darunter ist nicht nur die aufgerufene Methode, sondern auch zukünftig benötigte Methoden):

/**
 * Gibt anhand des übergebenene Key's den passenden Icon zurück
 * @param key
 * @return
 */
public static int getSystemInfoIcon(String key){
    switch(key){
        default:
            return R.mipmap.ic_launcher;
    }
}

/**
 * Gibt anhand des übergebenen Key's den passenden Icon zurück
 * @param key
 * @return
 */
public static int getValueIcon(String key){
    switch(key){
        default:
            return R.mipmap.ic_launcher;
    }
}

/**
 * Gibt anhand des übergebenen Key's den passenden Icon zurück
 * @param key
 * @return
 */
public static int getDeviceIcon(String key){
    switch(key){
        default:
            return R.mipmap.ic_launcher;
    }
}

Als letzter Schritt vor dem ersten Test der App wird noch ein kleiner Fehler behoben. Dazu öffnest du die Datei mobile -> res -> layout -> value_item.xml und änderst im FrameLayout-Tag die Zeile

android:layout_height="match_parent"

um in:

android:layout_height="wrap_content"

Wegen diesem Fehler waren die einzelnen Elemente im SettingsFragment so groß wie der Bildschirm und deswegen wurden immer nur 2 Elemente angezeigt. Jetzt sind die Elemente wie gewünscht so groß, wie in der Datei dimens.xml unter dem Punkt „recyclerItemHeight“ definiert.

Die App auf dem Emulator testen

Um den Emulator zu starten klickst du in der Leiste oben auf den großen grünen Pfeil.

Mit dem grünen Pfeil startest du den Emulator.

Mit dem grünen Pfeil startest du den Emulator.

Daraufhin öffnet sich eine Übersicht mit allen angelegten virtuellen Geräten. Falls du noch keins angelegt hast, wählst du unten „Create new virtual device“.

Hier werden alle virtuellen Geräte aufgelistet.

Hier werden alle virtuellen Geräte aufgelistet.

Hier kannst du dir nun ein Modell aussuchen.

In diesem Fenster findest du eine Liste vieler verschiedener Modelle.

In diesem Fenster findest du eine Liste vieler verschiedener Modelle.

Eine Betriebssystemversion kannst du dir nach einem Klick auf „Next“ aussuchen.

Hier findest du eine Liste an Betriebssystemversionen.

Hier findest du eine Liste an Betriebssystemversionen.

Nach einem weiteren Klick auf „Next“ kannst du das Gerät genauer definieren (ist nicht unbedingt nötig) und die Erstellung mit einem Klick auf „Finish“ abschließen.

Das Gerät kannst du hier konfigurieren.

Das Gerät kannst du hier konfigurieren.

Nach kurzer Ladezeit sollte der Emulator starten und nach einem mehr oder weniger schnellen Startvorgang solltest du einen Android Homescreen sehen, auf dem nach ein paar Augenblicken die Smarthome App startet. Hier kannst du nun im Hauptmenü den Punkt „Einstellungen“ anklicken und der Einstellungs-Bildschirm sollte in etwa so aussehen, wie auf dem folgenden Bild.

So sollte das SettingsFragment aussehen.

So sollte das SettingsFragment aussehen.

Bei Fragen oder Problemen kannst du mir gerne einen Kommentar hinterlassen.

Teile diesen Beitrag
, , ,
Vorheriger Beitrag
Smarthome App #5: Einstellungs-Bildschirm (1/2)
Nächster Beitrag
Smarthome App #7: Raumsteuerung (1/2)

Ähnliche Beiträge

Menü

Wir nutzen Cookies, um dir passende Inhalte zu präsentieren und dein Surfvergnügen zu optimieren, aktivieren Cookies aber erst, wenn du auf akzeptieren klickst. Weitere Informationen

Wir benutzen Google Analytics, um zu ermitteln, welche Inhalte unsere Besucher sehen wollen und welche nicht. Eingebettete YouTube-Videos helfen dir mittels Cookies nur die Videos zu sehen, die du sehen willst.

Schließen