Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 关于getView()的问题_Android - Fatal编程技术网

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

}