Android 关于getView()的问题
有人能解释一下下面的代码是做什么的吗Android 关于getView()的问题,android,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 = (LayoutIn
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;
}
}
Adapter.getView
文档给出了使用getView的一些指示:
public abstract View getView (int position, View convertView, ViewGroup parent)
获取在数据集中指定位置显示数据的视图。您可以手动创建视图,也可以从XML布局文件中展开视图。当视图充气时,父视图(GridView、ListView…)将应用默认布局参数,除非使用充气(int、android.View.ViewGroup、boolean)指定根视图并防止附加到根视图
位置
该项在适配器数据集中的位置,该数据集是我们想要查看的项的数据集
convertView
如果可能,旧视图将被重用。注意:在使用之前,您应该检查此视图是否为非null且类型是否合适。如果无法转换此视图以显示正确的数据,此方法可以创建新视图
父母亲
此视图最终将附着到的父级
退换商品
与指定位置的数据相对应的视图
将为数据集中的每个项调用getView。从: 适配器对象充当桥接器 在AdapterView和 该视图的基础数据。这个 适配器提供对数据的访问 项目。适配器也负责 用于为中的每个项目创建视图 数据集
package com.stampcollections;
导入java.util.Vector;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.BaseAdapter;
导入android.widget.GridView;
导入android.widget.ImageView;
导入android.widget.AdapterView.OnItemClickListener;
导入com.database.DBAdapter;
导入com.techvalens.servercommunication.WebServiceDetails;
公共类GridViewFirst扩展活动实现McClickListener,
网络服务详情
{
公共静态int位置=0;
GridView-MyGrid;
DBAdapter数据库=新的DBAdapter(此);
向量向量2=新向量();
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gridfirst);
GridView GridView=(GridView)findViewById(R.id.GridView);
setAdapter(新的ImageAdapter(this));
setOnItemClickListener(this);
}
公共类ImageAdapter扩展了BaseAdapter{
私有上下文;
公共图像适配器(上下文c){
mContext=c;
}
public int getCount(){
返回mThumbIds.length;
}
公共对象getItem(int位置){
返回null;
}
公共长getItemId(int位置){
返回0;
}
//为适配器引用的每个项目创建新的ImageView
公共视图getView(int位置、视图转换视图、视图组父视图){
图像视图图像视图;
如果(convertView==null){//如果它不是循环使用的,则初始化一些
属性
imageView=新的imageView(mContext);
setLayoutParams(新的GridView.LayoutParams(85,85));
imageView.setScaleType(imageView.ScaleType.FIT_XY);
设置填充(8,8,8,8);
}否则{
imageView=(imageView)convertView;
}
imageView.setBackgroundResource(R.drawable.stampbackground);
setImageResource(mThumbIds[position]);
返回图像视图;
}
//参考我们的图像
私有整数[]mThumbIds={
R.drawable.ghandig,R.drawable.madhu,R.drawable.munshi,R.drawable.namdev,
可拉拔水獭,可拉拔熊猫,可拉拔拉宾德拉纳,可拉拔栏杆,
可拉深。铁路1号,可拉深。拉吉,可拉深。泰姬陵,可拉深。乌龟
};
}
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){
//意向意向=新意向(GridViewFirst.this,TabActivity.)
不活动(3);
位置=arg2;
}
public void switchTabInActivity(int indexTabToSwitchTo){
TabActivity-ParentActivity;
ParentActivity=(TabActivity)this.getParent();
ParentActivity.switchTab(indexTabToSwitchTo);
}
}通过实现
Baseadapter
接口来构建自定义视图。
它有两个重要的方法:getcount()
和getview()
。
getcount()
方法返回适配器提供给listview
或gridview
的视图数。
getview()
方法将逐个给出视图。
它的
convertview
属性非常重要,因为它返回先前创建的视图。检查null
如果该值不为null,则将同一视图用于不同位置以提高效率,或者将新视图充气并返回给父视图。您不了解哪些特定部分?在R.layout.demographic\u列表项中,只有一个复选框。但在这里充气后,我得到了7个复选框。这是怎么回事?数据集中的每个项目都会调用getView。请看我的编辑。很抱歉……但这个“数据集”指的是什么?这个数据集是从哪里获得的?意思是:对于屏幕上显示的每个列表项,都会调用getView。如果有7个项目可见,则会调用getView 7次,每个项目调用一次。膨胀视图的成本很高,重新膨胀列表项是没有意义的。convertView是使用getView更新的当前列表项。第一次绘制项目时,convertView为空。在以后的时间里,它将不会为空,代码也不会对其重新充气。底部部分只是更新convertView上的一些文本。
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);
}