Android列表视图未被填充

时间:2014-11-08 03:38:42

标签: java android android-listview android-xml

我正在尝试使用带有一些xml数据的id android.id/list填充listview ..数据已成功请求,并且在将其传递给我的Lazy Adapter并将其设置为listview时没有错误。有人可以帮帮我吗?

请求:

 private void requestFeed() {

    SimpleXmlRequest<StationList> simpleRequest = new SimpleXmlRequest<StationList>(Request.Method.GET, url, StationList.class,  
            new Response.Listener<StationList>() 
            {
                @Override
                public void onResponse(StationList response) {

                    list = response.getStationList();
                    buildFeed();

                    if(mSplashDialog != null) {
                        removeSplashScreen();
                    } else {
                        setReloadFeedButtonState(false);
                    }
                }
            }, 
            new Response.ErrorListener() 
            {
                 @Override
                 public void onErrorResponse(VolleyError error) {                                
                    // error Object
                     Log.d("TESTE", error.toString());
               }
            }
        ); 

    simpleRequest.setTag(SIMPLE_TAG);
    queue = Volley.newRequestQueue(this);
    queue.add(simpleRequest);
}

buildFeed:

private void buildFeed() {

    if(stations == null) {
        stations = (ListView) findViewById(android.R.id.list);
        adapter = new LazyAdapter(this, list);
        stations.setAdapter(adapter);
    }

    adapter.notifyDataSetChanged();

}

适配器:

public class LazyAdapter extends BaseAdapter {

private List<Station> stations;
private static LayoutInflater inflater = null;

public LazyAdapter(Activity activity, List<Station> stations) {
    this.stations = stations;
    inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
    return stations.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;
    if(convertView == null)
        vi = inflater.inflate(R.layout.list_row, null);

    TextView name = (TextView) vi.findViewById(R.id.station_name);
    TextView ct = (TextView) vi.findViewById(R.id.station_ct);
    TextView cl = (TextView) vi.findViewById(R.id.station_cl);

    Station tmp = stations.get(position);

    name.setText(tmp.get_name());
    ct.setText(tmp.get_ct());
    cl.setText(tmp.get_lc().toString());

    return vi;
}

}

活动的xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/MainActivityLL"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="me...MainActivity" >

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:divider="@color/list_divider"
    android:dividerHeight="1dp"
    android:layout_weight="1"
    android:listSelector="@drawable/list_row_selector" />

<TextView 
    android:id="@android:id/empty"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textAppearance="@android:style/TextAppearance.Medium"
    android:text="@string/emptyList"
    android:gravity="center" />

我已经检查了响应中的站点列表并且不是空的。我有我需要的所有数据,但listview始终显示来自textview的空消息,ID为android.id/empty ..

2 个答案:

答案 0 :(得分:1)

删除android:id="@android:id/list"
将其替换为android:id="@+id/list"

 <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:layout_weight="1"
        android:listSelector="@drawable/list_row_selector" />

答案 1 :(得分:0)

在制作自定义适配器时尝试使用ViewHolder设计模式:

public class LazyAdapter extends BaseAdapter {

    private List<Station> stations;
    private Context context;

    public LazyAdapter(Context context, List<Station> stations) {
        this.stations = stations;
        this.context=context;
    }

    public int getCount() {
        return stations.size();
    }

    public Object getItem(int position) {
        return stations.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null){
            holder = new ViewHolder();
            convertView = LayoutInflater.from(context).inflate(R.layout.list_row, null);
            holder.name = (TextView) convertView.findViewById(R.id.station_name);
            holder.ct = (TextView) convertView.findViewById(R.id.station_ct);
            holder.cl = (TextView) convertView.findViewById(R.id.station_cl);

            convertView.setTag(holder);
        }else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.name.setText(stations.get(position).get_name());
        holder.ct.setText(stations.get(position).get_ct());
        holder.cl.setText(stations.get(position).get_lc().toString());

        return convertView;
    }

    class ViewHolder{
        TextView name;
        TextView ct;
        TextView cl;
    }
}