2010-10-03 5 views
0

Je suis un novice. Je suis désolé si je demande une question ridicule.Comment fonctionne ListAdapter générique?

Je souhaite avoir la classe d'adaptateur générique implémente ListAdapter. Et je dois remplacer certaines fonctions comme getView.

La fonction getView est, je pense, la partie la plus importante et elle appelle quand elle est en rendu (comme asp.net (je pense)).

J'ai écrit du code dans le niveau le plus simple ci-dessous:

package com.yeni.listAdapter; 

import android.app.ListActivity; 
import android.os.Bundle; 

public class baslangicAktivitesi extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 
     setListAdapter(new NewAdapter(this)); 
    } 
} 

Et voici ma classe générique ListAdapter:

package com.yeni.listAdapter; 

import android.content.Context; 
import android.database.DataSetObserver; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.LinearLayout; 
import android.widget.ListAdapter; 
import android.widget.TextView; 

public class NewAdapter implements ListAdapter { 
    private Context ctx; 

    public NewAdapter(Context _ctx) { 
     super(); 
     ctx = _ctx; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public Object getItem(int arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public long getItemId(int arg0) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public int getItemViewType(int arg0) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     TextView tv = new TextView(ctx); 
     tv.setText("This text will be shown"); 

     LinearLayout lila = new LinearLayout(ctx); 
     lila.addView(tv,new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT)); 

     return lila; 
    } 

    @Override 
    public int getViewTypeCount() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public boolean hasStableIds() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isEmpty() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public void registerDataSetObserver(DataSetObserver observer) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void unregisterDataSetObserver(DataSetObserver observer) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean areAllItemsEnabled() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    @Override 
    public boolean isEnabled(int position) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

La seule chose que je me demande comment est le mécanisme de ListAdapter et si je veux écrire le modèle avec xml dans (je pense qu'il sera) res->layout comment il devrait être (vue composée que je veux écrire quelque chose ImageView et TextView?

Merci beaucoup ... très

Répondre

0

Il est difficile de comprendre ce que vous voulez dire ... mais mon meilleur pari est, vous voulez savoir comment utiliser votre propre coutume xml comme ListItem dans votre ListActivity ....

Comme vous l'aurez deviné, créez un modèle xml de votre listItem et le stocker entre vos mises en page ...

vous aurez besoin d'un LayoutInflater ...

LayoutInflater mInflater = LayoutInflater.from(context); 

Voici une version piratée d' l'exemple de code que j'ai trouvé here

public View getView(int position, View convertView, ViewGroup parent) { 
      ....; 

      // When convertView is not null, we can reuse it directly, there is no need 
      // to reinflate it. We only inflate a new View when the convertView supplied 
      // by ListView is null. 
      if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.list_item_icon_text, null); 

       TextView tvFoo = (TextView) convertView.findViewById(R.id.text); 
       ImageView ivBar = (ImageView) convertView.findViewById(R.id.icon); 
      } 
      // Bind the data efficiently with the holder. 
      tvFoo.setText(/* data at position */); 
      ivBar.setImageBitmap(/* image at position*/); 

      return convertView; 
     } 

Note: R.layout.list_item_icon_text est l'identifiant de votre mise en page personnalisée. :)

Questions connexes