Android 自定义适配器中的getView(),其对象在自定义视图中创建,而不是调用?

Android 自定义适配器中的getView(),其对象在自定义视图中创建,而不是调用?,android,view,baseadapter,Android,View,Baseadapter,我有一个活动。它调用自定义视图LevelView public class LevelActivity extends Activity{ ArrayList<Tile> mTiles = new ArrayList<Tile>(); public static Resources resources; @Override public void onCreate(Bundle savedInsta

我有一个活动。它调用自定义视图LevelView

   public class LevelActivity extends Activity{

        ArrayList<Tile> mTiles = new ArrayList<Tile>();
        public static Resources resources;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            resources = this.getResources();
            setContentView(new LevelView(this));
        }

    }
public类LevelActivity扩展了活动{
ArrayList mTiles=新的ArrayList();
公共静态资源;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
resources=this.getResources();
setContentView(新的LevelView(本));
}
}
自定义的LevelView类--

LevelView用于创建一个gridView,该gridView应该由平铺对象填充。因此,将创建一个自定义适配器TileAdapter对象

   public class LevelView extends View{

        Context mContext;
        Canvas mCanvas;
        ArrayList<Tile>mTiles = new ArrayList<Tile>();
        boolean drawGlow;
        View mSingleTileView;
        int mSingleTilePosition;
        TileAdapter mAdapter;

        public LevelView(Context context) {
            super(context);
            mContext = context;
            LayoutInflater GridLayout = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            GridView gridview = (GridView) GridLayout.inflate(R.layout.level_view, null);

            this.addTilesToLevel();
            mAdapter = new TileAdapter(mContext, mTiles);
            gridview.setAdapter(mAdapter);
            mAdapter.notifyDataSetChanged();
            gridview.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                    mSingleTileView = v;
                    mSingleTilePosition = position;
                    drawGlow = true;
                    Toast.makeText(mContext, "" + position, Toast.LENGTH_SHORT).show();
                    LevelView.this.invalidate();
                }
            });
        }

        void addTilesToLevel() {
            RedTile redTile = new RedTile();
            redTile.addColor();
            redTile.addTileImage();
            mTiles.add(redTile);
            mTiles.add(redTile);
            mTiles.add(redTile);
            mTiles.add(redTile);
        }
    }
public类LevelView扩展了视图{
语境;
帆布mCanvas;
ArrayListTiles=新的ArrayList();
布尔拉丝发光;
查看mSingleTileView;
int-msingleteposition;
瓦莱达普特马达普特;
公共级别视图(上下文){
超级(上下文);
mContext=上下文;
LayoutInflater GridLayout=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
GridView GridView=(GridView)GridLayout.inflate(R.layout.level\u视图,null);
此.addTilesToLevel();
mAdapter=新的tiledapter(mContext,mTiles);
setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
mSingleTileView=v;
mSingleTilePosition=位置;
drawGlow=true;
Toast.makeText(mContext,“+位置,Toast.LENGTH_SHORT.show();
LevelView.this.invalidate();
}
});
}
void addTilesToLevel(){
RedTile RedTile=新的RedTile();
redTile.addColor();
redTile.addTileImage();
mTiles.add(红瓦);
mTiles.add(红瓦);
mTiles.add(红瓦);
mTiles.add(红瓦);
}
}
TileAdapter类--- TileAdapter包含getView()方法。问题就在这里。未调用此方法

  public class TileAdapter extends BaseAdapter{
        String TAG = "TileAdapter";
        private Context mContext;
        ArrayList<Tile> mTiles;

        public TileAdapter(Context c,ArrayList<Tile> tiles) {
            super();
            mContext = c;
            mTiles = tiles;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mTiles.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            ImageView imageView;

            int tileCount = getCount();
            Log.i(TAG, "In getView");
            GridView gridView = (GridView)parent;

            gridView.setNumColumns((int)(tileCount/2));
            if(convertView == null) {
                imageView = new ImageView(mContext);
                int viewWidth = imageView.getWidth();
                int viewHeight = imageView.getHeight();

                imageView.setLayoutParams(new GridView.LayoutParams(100, 200));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(4, 4, 4, 4);

            } else {
                imageView = (ImageView) convertView;
            }
            imageView.setImageBitmap(mTiles.get(position).getTileImage());
            return imageView;

        }
    }
公共类TileAdapter扩展BaseAdapter{
String TAG=“TileAdapter”;
私有上下文;
阵列列表;
公共TileAdapter(上下文c、ArrayList tiles){
超级();
mContext=c;
mTiles=瓷砖;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回mTiles.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回null;
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
图像视图图像视图;
int tileCount=getCount();
Log.i(标记“在getView中”);
GridView GridView=(GridView)父级;
setNumColumns((int)(tileCount/2));
if(convertView==null){
imageView=新的imageView(mContext);
int viewWidth=imageView.getWidth();
int viewHeight=imageView.getHeight();
setLayoutParams(新的GridView.LayoutParams(100200));
imageView.setScaleType(imageView.ScaleType.CENTER\U裁剪);
设置填充(4,4,4,4);
}否则{
imageView=(imageView)convertView;
}
setImageBitmap(mTiles.get(position.getTileImage());
返回图像视图;
}
}

如果我能找到解决这个问题的办法,那将大有帮助。谢谢。

尝试调试write System.out.println(“Levelview正在调用,,,”;在超级(上下文)之后的Levelview构造函数中;我很确定您应该在
getItem(int位置)
中返回一个实际对象;e、 g.将其更改为
返回mTiles.get(position)
。别忘了确认列表中确实包含元素。您可能还想看看替代ArrayAdapter的实现,默认情况下它已经为您完成了一些这方面的工作。@Ankit正在调用LevelView构造函数。@MH。ArrayAdapter与TextView引用id一起工作,我不使用TextView。您可以使ArrayAdapter与您喜欢的任何布局/内容一起工作,只需一个,并查看其中一个。