在getView()方法如何使用,它从哪儿得到叫什么名字?如何使用、叫什么名字、方法、getView

2023-09-05 10:44:24 作者:坏坏骄傲感.

我是新的Andr​​oid开发,并一直在关注可在Android网站上的教程。我目前的教程意见的部分,特别是一个用于网浏览次数:您好,网格视图教程。

我无法理解的看法是如何通过适配器进行。据我所知,您必须在适配器类重写getView()方法,在这个方法中,你如何定义你的浏览设置了。我不明白的是哪里getView()实际上被调用?也许我有一种错误的心态在这里,但在下面(网格查看教程)在code我没有看到任何调用getView()(或适配器类使用的任何其他的东西,如getCount将())。

main.xml中

 < XML版本=1.0编码=UTF-8&GT?;
< GridView中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:ID =@ + ID / GridView控件
    机器人:layout_width =FILL_PARENT
    机器人:layout_height =FILL_PARENT
    机器人:columnWidth中=90dp
    机器人:为numColumns =auto_fit
    机器人:verticalSpacing =10dp
    机器人:horizo​​ntalSpacing =10dp
    机器人:stretchMode =columnWidth中
    机器人:重力=中心/>
 

Start.java

 包com.examples.hellogridlayout;

进口android.app.Activity;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.GridView;
进口android.widget.Toast;
进口android.widget.AdapterView.OnItemClickListener;

公共类开始延伸活动{
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
    gridview.setAdapter(新ImageAdapter(本));

    gridview.setOnItemClickListener(新OnItemClickListener(){
        公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,长的id){
            Toast.makeText(Start.this,+位置,Toast.LENGTH_SHORT).show();
        }

      });
    }
}
 

ImageAdapter.java

 包com.examples.hellogridlayout;

进口android.content.Context;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.GridView;
进口android.widget.ImageView;

公共类ImageAdapter扩展了BaseAdapter {
    私人语境mContext;

    公共ImageAdapter(上下文C){
        mContext = C;
    }

    公众诠释getCount将(){
    返回mThumbIds.length;
    }

    公共对象的getItem(INT位置){
    返回null;
    }

    众长getItemId(INT位置){
        返回0;
    }

    //创建由适配器引用的每个项目的新的ImageView
    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        ImageView的ImageView的;
        如果(convertView == NULL){//如果它不回收,初始化一些属性
            ImageView的=新ImageView的(mContext);
            imageView.setLayoutParams(新GridView.LayoutParams(85,85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8,8,8,8);
        } 其他 {
            ImageView的=(ImageView的)convertView;
        }

        imageView.setImageResource(mThumbIds [位置]);
        返回ImageView的;
    }

    //引用到我们的形象
    私人整数[] mThumbIds = {
            R.drawable.sample_2,R.drawable.sample_3,
            R.drawable.sample_4,R.drawable.sample_5,
            R.drawable.sample_6,R.drawable.sample_7,
            R.drawable.sample_0,R.drawable.sample_1,
            R.drawable.sample_2,R.drawable.sample_3,
            R.drawable.sample_4,R.drawable.sample_5,
            R.drawable.sample_6,R.drawable.sample_7,
            R.drawable.sample_0,R.drawable.sample_1,
            R.drawable.sample_2,R.drawable.sample_3,
            R.drawable.sample_4,R.drawable.sample_5,
            R.drawable.sample_6,R.drawable.sample_7
    };
}
 
福清车主们,交通标线必须懂,不了解小心扣分罚款

解决方案

通过设置适配器,你告诉GridView控件来从适配器的意见,填补了所有的网格。因此, getView 在内部通过GridView控件调用来填补布局。

这就是为什么所有的适配器工具适配器 interface这样任何适配器视图可以请求适配器

I am new to Android development and have been following the tutorials available on the Android website. I am currently on the section of tutorials for Views, specifically the one for Grid Views: Hello, Grid View Tutorial.

I am having trouble understanding how views are made through an adapter. I understand that you must override the getView() method in your adapter class and in this method is where you define how your Views are set up. What I don't understand is where does getView() actually get called? Perhaps I've got the wrong kind of mentality here, but in the code below (the Grid View tutorial) I don't see any calls to getView() (or any other things used in the adapter class such as getCount()).

Main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center" />

Start.java

package com.examples.hellogridlayout;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class Start extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    GridView gridview = (GridView)findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent,View v, int position, long     id){
            Toast.makeText(Start.this, "" + position,Toast.LENGTH_SHORT).show();
        }

      });
    }
}

ImageAdapter.java

package com.examples.hellogridlayout;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

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.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

解决方案

By setting Adapter, you are telling GridView to fetch views from the Adapter to fill up all the grids. So getView is internally called by GridView to fill up the layout.

Thats why all the adapters implements Adapter interface so that any AdapterView can request the Adapter.