2012-04-04 6 views
0

In Klasse 1 habe ich eine Hashmap, die ich an meinen CustomAdapter sende.getview nicht aufgerufen CustomAdapter

map.put("year", "Apple");  
map.put("make", "Mango");  
map.put("model", "Grape");  
map.put("style", "Orange");  
map.put("series", "Peach"); 

//link to my adapter 
setListAdapter(new MyCustomAdapter(DynamicLists.this, R.layout.row, map)); 

Aber in der Klasse 2 my MyCustomAdapter getView Funktion kann nicht aufgerufen werden immer helfen zu verstehen, warum?

dank

CODE

//class 1 
public class DynamicLists extends ListActivity { 

    //class 2 
    public class MyCustomAdapter extends BaseAdapter { 
     String my_VALUES; 
     public MyCustomAdapter(Context context, int textViewResourceId, 
           HashMap<String, String> map) { 

      String[][] array = new String[map.size()][2]; 
      int count = 0; 
      String combined=""; 
      for(Map.Entry<String, String> entry : map.entrySet()){ 
       combined=""+entry.getKey()+""+entry.getValue(); 
       count++; 
      } 
      my_VALUES = combined; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View row=convertView; 

      if (row==null){ 
       LayoutInflater inflater=getLayoutInflater(); 
       row=inflater.inflate(R.layout.row, null); 
      } 

      TextView label =(TextView)row.findViewById(R.id.blocked); 
      label.setText(my_VALUES); 

      return row;   
     } 

     @Override 
     public int getCount() { 
      return 0; 
     } 


     @Override 
     public Object getItem(int position) {    
      return null; 
     } 


     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 
    } //end of class 2 


    private static final String TAG = "Example"; 


    public static HashMap<String, String> map = new HashMap<String, String>(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //tie data to list, call constructor MyCustomAdapter 
    //populate the list. ArrayAdapter takes current class, layout and array 
    map.put("year", "Apple");  
    map.put("make", "Mango");  
    map.put("model", "Grape");  
    map.put("style", "Orange");  
    map.put("series", "Peach"); 
    //link to my adapter 
    setListAdapter(new MyCustomAdapter(DynamicLists.this, R.layout.row, map));   

    } 


    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     //super.onListItemClick(l, v, position, id); 
     String selection = l.getItemAtPosition(position).toString(); 
     Toast.makeText(this, selection, Toast.LENGTH_LONG).show();   
    }   

} //end of class 1 

Antwort

4
getCount() 

Wie viele Elemente in dem Datensatz durch diesen Adapter dargestellt sind. http://developer.android.com/reference/android/widget/Adapter.html

@Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return size;// more than zero 
    } 

getItem() muss etwas zurückgeben

@Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return my_VALUES;// may be in your case 
    } 
+0

muss ich irgendwo die Größe deklarieren? – user803271

+0

Es ist das Nein des Elements, das Ihre Karte enthält. –

+0

siehe Beispiel http://android.amberfog.com/?p=296 –

1

Muss Größe erklären. Ihre GetCount() Funktion muss Größe deklarieren ... Setzen Sie die Rückkehr auf 1 und Ihre Liste wird von einem Element aufgefüllt. Also, wenn Sie in einem Cursor übergeben, geben Sie einfach cursor.getCount();

Soo ... Und Sie Liste wird richtig ausgefüllt werden.

@Override 
public int getCount() { 
    return cursor.getCount(); 
} 

In Ihrem Fall geben Sie die Größe Ihrer Karte zurück.

Verwandte Themen