2010-10-03 65 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。 :)