关于getView()的问题

时间:2010-10-05 13:25:37

标签: android

有人可以解释以下代码的作用吗?

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

   // TODO Auto-generated method stub
   View myView = null;
   try {
    myView = convertView;
    if (null == myView) {
     LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     myView = li.inflate(R.layout.demographic_list_item, null);

    }
    if (mScan_listItems[position] != null) {
     // read the values and attach them.
     TextView tv1 = (TextView) myView
       .findViewById(R.id.DemoGraphicItem_Text);

     tv1.setText(mScan_listItems[position]);

    }

   } catch (Exception e) {
    e.printStackTrace();
   }

   return myView;
  }

 }

3 个答案:

答案 0 :(得分:8)

Adapter.getView文档给出了使用getView的一些指示:

public abstract View getView (int position, View convertView, ViewGroup parent)

获取一个视图,显示数据集中指定位置的数据。您可以手动创建View,也可以从XML布局文件中对其进行充气。当视图膨胀时,父视图(GridView,ListView ...)将应用默认布局参数,除非您使用inflate(int,android.view.ViewGroup,boolean)指定根视图并防止附加到根。

位置

项目在我们想要的视图项目的适配器数据集中的位置。

convertView

如果可能的话,重用旧视图。注意:在使用之前,应检查此视图是否为非null且类型是否合适。如果无法转换此视图以显示正确的数据,则此方法可以创建新视图。

此视图最终将附加到

的父级

返回

与指定位置的数据对应的视图。


将为数据集中的每个项调用getView。来自Adapter API docs

  

Adapter对象充当桥接器   在AdapterView和。之间   该视图的基础数据。该   适配器提供对数据的访问   项目。适配器也负责   为每个项目制作一个视图   数据集。

答案 1 :(得分:0)

通过实施Baseadapter界面构建自定义视图。 它有两个重要方法:getcount()getview()getcount()方法返回适配器为listviewgridview提供的视图数。 getview()方法将逐个提供视图。 其convertview属性至关重要,因为它返回先前创建的视图。检查null,如果它不为null,则为同一个位置使用相同的视图以提高效率,或者为新视图充气并将其返回给父视图。

答案 2 :(得分:-1)

package com.stampcollections;
import java.util.Vector;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;
import com.database.DBAdapter;
import com.techvalens.servercommunication.WebServiceDetails;
public class GridViewFirst extends Activity implements OnItemClickListener,        
WebServiceDetails
{
public static int position = 0;
GridView MyGrid;
DBAdapter dataBase = new DBAdapter(this);
Vector <String>vector2 = new Vector<String>();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.gridfirst);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));
    gridview.setOnItemClickListener(this);
}
public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

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

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some  
                attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setBackgroundResource(R.drawable.stampbackground);
        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {

      R.drawable.ghandig,R.drawable.madhu,R.drawable.munshi,R.drawable.namdev,
      R.drawable.otter,R.drawable.panda,R.drawable.rabindranath,R.drawable.rail,
      R.drawable.rail1,R.drawable.raj,R.drawable.taj,R.drawable.tortoise
    };
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    //  Intent intent = new Intent(GridViewFirst.this,TabActivity.)
    switchTabInActivity(3);
    position = arg2;

}
public void switchTabInActivity(int indexTabToSwitchTo){
    TabActivity ParentActivity;
    ParentActivity = (TabActivity) this.getParent();
    ParentActivity.switchTab(indexTabToSwitchTo);

}

}