从未调用过getView函数

时间:2012-03-19 16:49:03

标签: android android-listview

我有一个webview但是从不调用getView函数。我已经看到了类似的问题,但它存在差异的问题。任何人都可以帮助我吗?

Java代码:

List<String[]> info=new ArrayList<String[]>();
         String[] names_info=new String[5];
         String[] phones_info=new String[5];
         String[] map_info=new String[5];
         String[] web_info=new String[5];
         String[] photos_info=new String[5];
for(int i=0;i<names_info.length;i++)
     {
         info.add(new String[]{names_info[i],phones_info[i],map_info[i],web_info[i],photos_info[i]});
     }
     for (int i = 0; i < info.size(); i++) {
       Log.d("TAG", "item " + i + 
                " name:" +  info.get(i)[0] + 
                " info:" + info.get(i)[1]);
    }
     FacilitiesAdapter adapter = new FacilitiesAdapter(this,info,want_info_display,want_phone_display,want_photos_display);
     //System.out.println(info[0]);
     setListAdapter(adapter);

我在Log中看到了结果,这意味着我的信息正常得到了结果。

这是我的适配器。

public class FacilitiesAdapter extends ArrayAdapter<String> {
    private final Context context;
    List <String[]> dataList;

    public FacilitiesAdapter(Context context, List<String[]> dataList, int need_phone, int need_info, int need_photos)  {
        super(context, R.layout.expand_row);
        this.context = context;
        this.dataList = dataList;
        //this.tracks_condition=tracks_condition;
        //this.count=count;
    }
     public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View rowView = inflater.inflate(R.layout.expand_row, parent, false);
            System.out.println("I am here");
            String[] data = dataList.get(position);
            String name=data[0];
            TextView textView = (TextView) rowView.findViewById(R.id.name);
            System.out.println("I am in the adapter "+name);
            textView.setText(name);
            return rowView;
     }
}

这里我甚至看不到*System.out.println("I am here");*。 有什么帮助吗?

4 个答案:

答案 0 :(得分:2)

更改super(context, R.layout.expand_row);

super(context, R.layout.expand_row, dataList);

或覆盖get View Count回调并让它返回您要显示的项目数

答案 1 :(得分:1)

看起来你没有在适配器内的任何地方使用数据源。(数据源是提供要显示的数据的任何东西,例如arraylist或游标。)如果数据源中没有数据,getview()根本不会被调用。在您的情况下,将调用更改为超类构造函数并传递“dataList”。然后,它将自动使用。

super(context, R.layout.expand_row, dataList);\

如果您仍想查看列表中发生的事情,请覆盖getCount()函数。

public int getCount(){
    return 1;
}

但是一旦开始提供数据,请将返回类型更改为数据大小。希望这会有所帮助。

答案 2 :(得分:1)

事实证明我的getView()未被调用的问题是因为它不可见。可能在布局xml中某些其他视图正在隐藏列表视图或者您已将可见性更改为已消失。 如果列表视图不可见,则不会调用其适配器的getView函数。

然后解决方法是:检查代码中布局的图形视图,以确保ListView可见。

答案 3 :(得分:0)

如果您扩展ListActivity,请确保您的listview ID为“@android:id / list”