Listview 未调用ArrayAdapter getView()

Listview 未调用ArrayAdapter getView(),listview,gridview,android-arrayadapter,Listview,Gridview,Android Arrayadapter,我正在尝试使用自定义ArrayAdapter从android活动的布局填充GridView,我在其中覆盖了getView()。当我运行应用程序时,GridView显示在屏幕上,但完全为空。我推断问题在于getView()从未被调用。我确实检查了ArrayList是否为空。我使用了一些日志语句(对于那些不熟悉Android编程的人,类似于System.out.print()),发现传递给适配器的ArrayList不是空的,但是适配器的getCount()方法总是返回0。我试着浏览一些android

我正在尝试使用自定义ArrayAdapter从android活动的布局填充GridView,我在其中覆盖了getView()。当我运行应用程序时,GridView显示在屏幕上,但完全为空。我推断问题在于getView()从未被调用。我确实检查了ArrayList是否为空。我使用了一些日志语句(对于那些不熟悉Android编程的人,类似于System.out.print()),发现传递给适配器的ArrayList不是空的,但是适配器的getCount()方法总是返回0。我试着浏览一些android源代码,以找到应该何时调用getView(),这导致了获得视图()和移动对象。这一切似乎都很直截了当,我没有发现任何错误。除非有某种反奇迹的解释,到目前为止,我还是空着的(可能是因为我是一名业余程序员)。任何帮助都将不胜感激

活动文件:

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.*;
import android.widget.*;

public class LevelMapActivity extends FragmentActivity implements View.OnClickListener{

    public final int TOTAL_LEVELS = 12;//TODO Set TOTAL_LEVELS to figure out how many levels exist.
    public final int COLUMNS = 5;

    GridView grid;
LevelSelectorAdapter adapter;
ArrayList<LevelSelector> levels;

@Override
public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_level_map);

    grid = (GridView)findViewById(R.id.GridView_LevelMap);
    grid.setNumColumns(COLUMNS);

    levels = new ArrayList<LevelSelector>();

    for(int i=0; i<TOTAL_LEVELS/5; i++){
        for(int j=0; j<5; j++){
            LevelSelector levelSelector = new LevelSelector(this, i*COLUMNS+j+1);
            levels.add((i*COLUMNS)+j, levelSelector);
        }
    }
    for(int j=0; j<TOTAL_LEVELS%5; j++){
        LevelSelector levelSelector = new LevelSelector(this, TOTAL_LEVELS-(COLUMNS-1)+j);
        levels.add(j+TOTAL_LEVELS-COLUMNS, levelSelector);
    }

    adapter = new LevelSelectorAdapter(this, R.layout.level_selector, levels);
    grid.setAdapter(adapter);

}//ends onCreate()

@Override
public void onPause(){

    // TODO Auto-generated method stub
    super.onPause();

}//ends onPause()

@Override
public void onClick(View view){

    // TODO Auto-generated method stub

}//ends onClick()

}//ends Class
import java.util.ArrayList;
导入android.os.Bundle;
导入android.support.v4.app.FragmentActivity;
导入android.util.Log;
导入android.view.*;
导入android.widget.*;
公共类LevelMapActivity扩展FragmentActivity实现View.OnClickListener{
public final int TOTAL_LEVELS=12;//TODO设置TOTAL_LEVELS以计算存在多少个级别。
公共最终整数列=5;
网格视图网格;
电平选择器或适配器;
阵列列表级别;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u level\u map);
grid=(GridView)findViewById(R.id.GridView\u LevelMap);
grid.setNumColumns(列);
级别=新的ArrayList();

对于(int i=0;i,由于我曾尝试使用适配器覆盖
getView()
方法,因此我以前不需要在其构造函数中传递给适配器的数组。
将数组传递给超级构造函数会导致它被初始化,因此在
getCount()
方法中可用。这就是为什么
getCount()
每次都显示为0,即使数组不是空的

import java.util.ArrayList;

import android.content.Context;
import android.util.Log;
import android.view.*;
import android.widget.*;

public class LevelSelectorAdapter extends ArrayAdapter<LevelSelector>{

Context context;
int resource;
ArrayList<LevelSelector> levelSelectors;

public LevelSelectorAdapter(Context context, int resource, ArrayList<LevelSelector> levelSelectors){

    super(context, resource);
    this.context = context;
    this.resource = resource;
    this.levelSelectors = levelSelectors;

}//ends LevelSelectorAdapter()

public static class ViewHolder{
    public TextView level;
    public TextView time;
}

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

    View view = convertView;
    ViewHolder holder;

    if(view == null){
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(resource, null);
        holder = new ViewHolder();
        holder.level = (TextView)view.findViewById(R.id.TextView_LevelSelector_Level);
        holder.time = (TextView)view.findViewById(R.id.TextView_LevelSelector_Time);
        view.setTag(holder);
    }
    else{
        holder = (ViewHolder)view.getTag();
    }

    final LevelSelector levelSelector = levelSelectors.get(position);
    if(levelSelector != null){
        holder.level.setText(Integer.toString(levelSelector.getLevel()));
        holder.time.setText(Integer.toString(levelSelector.getTime()));
    }

    return view;

}//ends getView()

}//ends Class