2010-10-03 68 views
0

我是新手。如果我问一个荒谬的问题,我很抱歉。泛型ListAdapter如何工作?

我想要通用适配器类实现ListAdapter。我必须重写它的一些功能,如getView

getView函数是我认为最重要的部分,它在渲染时调用(如asp.net(我认为))。

我已经写在下面的简单的层面上一些代码:

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)); 
    } 
} 

这是我的通用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; 
    } 
} 

,我想知道事情是怎么ListAdapter机制如果我想用xml编写模板(我认为它会)res->layout它应该如何(复合视图,我想写点什么ImageView和TextView?

非常感谢你...

回答

0

很难理解你的意思......但我最好的选择是,你想知道如何在你的ListActivity中使用你自己定制的xml作为ListItem ....

正如你猜到了,创建列表项的XML模板并将其存储在布局中......

你需要的LayoutInflater ...

LayoutInflater mInflater = LayoutInflater.from(context); 

这里有一个破解注册版我发现样本代码为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; 
     } 

注:R.layout.list_item_icon_text是您的自定义布局的ID。 :)