2012-10-25 6 views
5

Kann mir jemand in die richtige Richtung zeigen, um ein ImageView in diesem SimpleAdapter zu bekommen? Die TAG_IMAGE sollte die Imageview sein. Ich bekomme das: Geben Sie missmatch: Kann nicht von ImageView zu int konvertieren. Und ja, ich bin ein Noob.Ich möchte ein Imageview in SimpleAdapter?

protected void onPostExecute(String file_url) { 
     // dismiss the dialog after getting all products 
     pDialog.dismiss(); 
     // updating UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
       * Updating parsed JSON data into ListView 
       * */ 
       ListAdapter adapter = new SimpleAdapter(
         AllProductsActivity.this, productsList, 
         R.layout.list_item, new String[] { TAG_PID, 
           TAG_NAME, TAG_PRICE, TAG_RANDOM, TAG_IMAGE },        
         new int[] { R.id.pid, R.id.name, R.id.price, 
           R.id.random, R.id.image }); 
       // Imageview to show 
       // updating listview 
       setListAdapter(adapter); 
      } 
     }); 

Antwort

14

main.xml mit dem Code unten gegeben

<?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:orientation="vertical" > 

    <TextView 
     android:id="@+id/textview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 

    <ListView 
     android:id="@+id/listview" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

listview_layout.xml und aktualisiert die Inhalte mit den unten angegebenen Code

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" 
> 
    <ImageView 
     android:id="@+id/flag" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:contentDescription="@string/hello" 
     android:paddingTop="10dp" 
     android:paddingRight="10dp" 
     android:paddingBottom="10dp" 
    /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
    > 
     <TextView 
      android:id="@+id/txt" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="15dp" 
     /> 

     <TextView 
      android:id="@+id/cur" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textSize="10dp" 
     /> 
    </LinearLayout> 
</LinearLayout> 

MainActivity.java mit der

Code unten gegeben
package com.example.list; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 

public class MainActivity extends Activity { 

    // Array of strings storing country names 
    String[] countries = new String[] { 
     "India", 
     "Pakistan", 
     "Sri Lanka", 
     "China", 
     "Bangladesh", 
     "Nepal", 
     "Afghanistan", 
     "North Korea", 
     "South Korea", 
     "Japan" 
    }; 

    // Array of integers points to images stored in /res/drawable-ldpi/ 
    int[] flags = new int[]{ 
     R.drawable.india, 
     R.drawable.pakistan, 
     R.drawable.srilanka, 
     R.drawable.china, 
     R.drawable.bangladesh, 
     R.drawable.nepal, 
     R.drawable.afghanistan, 
     R.drawable.nkorea, 
     R.drawable.skorea, 
     R.drawable.japan 
    }; 

    // Array of strings to store currencies 
    String[] currency = new String[]{ 
     "Indian Rupee", 
     "Pakistani Rupee", 
     "Sri Lankan Rupee", 
     "Renminbi", 
     "Bangladeshi Taka", 
     "Nepalese Rupee", 
     "Afghani", 
     "North Korean Won", 
     "South Korean Won", 
     "Japanese Yen" 
    }; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Each row in the list stores country name, currency and flag 
     List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>(); 

     for(int i=0;i<10;i++){ 
      HashMap<String, String> hm = new HashMap<String,String>(); 
      hm.put("txt", "Country : " + countries[i]); 
      hm.put("cur","Currency : " + currency[i]); 
      hm.put("flag", Integer.toString(flags[i])); 
      aList.add(hm); 
     } 

     // Keys used in Hashmap 
     String[] from = { "flag","txt","cur" }; 

     // Ids of views in listview_layout 
     int[] to = { R.id.flag,R.id.txt,R.id.cur}; 

     // Instantiating an adapter to store each items 
     // R.layout.listview_layout defines the layout of each item 
     SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.listview_layout, from, to); 

     // Getting a reference to listview of main.xml layout file 
     ListView listView = (ListView) findViewById(R.id.listview); 

     // Setting the adapter to the listView 
     listView.setAdapter(adapter); 
    } 
} 

Führen Sie die Anwendung

+0

Dies ist sehr hilfreich. Vielen Dank. – Jirapong

+4

Ich verstehe nicht, wie der Adapter weiß, dass es das Flag als src der ImageView festlegen sollte, und dass es den Text für die TextViews festlegen sollte. Liegt es daran, dass der Typ der Zielansicht betrachtet wird und eine Annahme gemacht wird, z. Wenn es sich um ein ImageView handelt, muss der relevante gemappte Wert ein Zeichen sein, das als src verwendet wird. – RTF

+0

@Code Das erklärt nicht, wie der Adapter weiß, dass R.id.flag auf ein ImageView verweist und R.id.txt auf ein TextView verweist. Es scheint, dass der SimpleAdapter eine Art Introspektion für das referenzierte Element durchführt und dann magisch weiß, welche Eigenschaft (text oder src) abhängig vom Elementtyp festgelegt werden muss. Ist das korrekt? – lintmachine

Verwandte Themen