【问题标题】:Android listview not being populated未填充 Android 列表视图
【发布时间】:2014-11-08 03:38:41
【问题描述】:

我正在尝试使用一些 xml 数据填充 id 为 android.id/list 的列表视图。数据已成功请求,并且在将其传递给我的懒惰适配器并将其设置为列表视图时我没有收到任何错误。有人可以帮帮我吗?

请求:

 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" />

我已经检查了响应中的电台列表并且不是空的。我有我需要的所有数据,但列表视图总是显示来自文本视图的空消息,id 为 android.id/empty ..

【问题讨论】:

  • 能发一下xml代码吗?
  • 完成@HareshChhelana
  • 你的应用程序是否执行GetView 方法??
  • 那么请检查stations.size();,因为只有这次会调用GetView :)

标签: java android android-listview android-xml


【解决方案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" />

【讨论】:

    【解决方案2】:

    在制作自定义适配器时尝试使用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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多