1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

spinner mit bild aus R.array [gelöst]

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von onip, 12.07.2012.

  1. onip, 12.07.2012 #1
    onip

    onip Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    7
    Registriert seit:
    02.07.2012
    hallo zusammen,

    so langsam geht es ans eingemacht bei mir.
    nach einer eingewöhnungsphase mit den layouts,
    versuche ich nun div. elemente zu verändern.
    beginnen tu ich mit spinner (item mit bild und text), wofür es kein view gibt.

    diesen artikel hab ich gefunden, der mir plausibel erscheint
    und mit dem ich mit einer layout.xml die ausgabe des items bestimmen kann.

    ich hab jedoch ein problem mit dem SimpleCursorAdapter.
    der benötigt datenbank einträge, so wie ich das verstehe.
    ich möchte aber auf mein R.array zugreifen, das so aussieht:
    Code:
    <string-array name="shipname">
        <item>Enterprise NCC-1701</item>
        <item>Enterprise NCC-1701-A</item>        
        <item>Enterprise NCC-1701-B</item>
        <item>Enterprise NCC-1701-C</item>
        <item>Enterprise NCC-1701-D</item>
    </string-array>
    
    <string-array name="shipimage">
        <item>ncc1701</item>
        <item>ncc1701a</item>
        <item>ncc1701b</item>
        <item>ncc1701c</item>
        <item>ncc1701d</item>
    </string-array>
    
    könnt ihr mir sagen ob ich evtl. shipname und shipimage in einen cursor übertragen kann,
    oder ob es ne andere möglichkeit gibt die ausgabe eines spinners zu verändern (bild und text je item)?

    // edit
    ich habs hinbekommen

    der aufruf in der activity
    Code:
    // spinner mit bild
    Spinner spin = (Spinner) findViewById(R.id.spinner_img_txt);
    String[] from = new String[] { "image", "name"};
    int[] to = new int[] { R.id.spinner_image, R.id.spinner_text};
    
    String[] simage = getResources().getStringArray(R.array.shipimage);
    String[] sname = getResources().getStringArray(R.array.shipname);
    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();
    for (int i = 0; i < sname.length; i++) {
        HashMap<String, String> map = new HashMap<String, String>();
        
        int imgID = getResources().getIdentifier(simage[i], "drawable", "gb.dashboard");
        if (imgID <= 0){
            imgID = R.drawable.ncc1701;
        }
        String imgIDstr = String.valueOf(imgID);
        
        map.put("image", imgIDstr);
        map.put("name", sname[i]);
        fillMaps.add(map);
    }
    SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.spinner_entry, from, to);
    adapter.setViewBinder(new SpinnerViewBinder());
    spin.setAdapter(adapter);
    
    das layout
    Code:
    <?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="wrap_content"
        android:orientation="horizontal" >
    
    <ImageView 
            android:id="@+id/spinner_image"
            android:layout_width="40sp"
            android:layout_height="40sp"
            android:contentDescription=""
     />
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/spinner_text"
        android:textColor="#000000"
        style="@style/TextNormal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:gravity="center_vertical"
        android:paddingLeft="6dip"
        android:minHeight="?android:attr/listPreferredItemHeight"
    />
    
    </LinearLayout>
    
    und hier die verarbeitung
    Code:
    package gb.dashboard.helper;
    
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    import gb.dashboard.R;
    
    public class SpinnerViewBinder implements SimpleAdapter.ViewBinder {
    
        public boolean setViewValue(View view, Object data, String text) {
            int viewId = view.getId();
            switch (viewId) {
            case R.id.spinner_text:
                TextView mView = (TextView) view;
                mView.setText(text);
                break;
    
            case R.id.spinner_image:
                ImageView mIconView = (ImageView) view;
                int imgID = Integer.valueOf(text);
                mIconView.setImageResource(imgID);
            }
            return true;
        }
    
    }
    
    wie ihr seht hab ich mir ordentlich was zusammen gesucht.
    was mich noch stört ist das aussehen, aber das bekommt ich noch in den griff.
    danke euch allen ;)

    wer vorschläge für eine verbesserung hat, möge doch was dazu schreiben.
     
    Zuletzt bearbeitet: 12.07.2012

Diese Seite empfehlen