1

我对要在列表视图中显示的数据使用了线性布局(如下所示)。我怎样才能做到这一点?通过使用以下代码,我得到空白列表视图,不知道为什么!以下是列表视图项目

列表视图项目

这是我正在使用的代码

public class ListAdapter extends BaseAdapter {

private LayoutInflater mInflater;
private Context context;
private ArrayList<Data> friendListData;

private class ViewHolder {
    public TextView name;
    public ImageView pro_image;

    public TextView comment;

}

public ListAdapter(Context context, ArrayList<Data> friendDataList) {
    // TODO Auto-generated constructor stub
    super();
    this.friendListData = friendDataList;
    this.context = context;

}

// @Override
public int getCount() {
    return friendListData.size();
}

// @Override
public Object getItem(int position) {
    return position;
}

// @Override
public long getItemId(int position) {
    return position;
}

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

    ViewHolder holder = null;

    mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.conversation_item, null);

        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.comment = (TextView) convertView.findViewById(R.id.comment);
        holder.pro_image = (ImageView) convertView.findViewById(R.id.avatarPic);
        convertView.setTag(holder);

    }
    else {
        holder = (ViewHolder) convertView.getTag();
    }
    Data data = (Data) getItem(position);

    holder.name.setText(data.getName());
    holder.comment.setText(data.getComment());
    holder.pro_image.setImageResource(data.getPro_image());

    return convertView;
}


public class Data {
String name;
String comment;
int pro_image;

     }
  }

在 MainActivity.java 中,我正在使用这样的适配器

    lv = (ListView) findViewById(R.id.ListView);
    friendsDataList = new ArrayList<Data>();
    adapter = new ListAdapter(MainActivity.this, friendsDataList);

    lv.setAdapter(adapter);
4

7 回答 7

1

观看google的“listView 的世界”讲座。

简而言之,您需要做的是:

  1. 创建一个单独的布局 xml,将用作每一行的模板。为每个需要根据数据更改其数据的视图设置一个id。

  2. 扩展BaseAdapter并实现getView()以根据数据中的位置显示项目,并实现getCount()获取行数。您可以实现getItem()以从数据中获取项目。

    请记住以有效的方式实现 getView() 方法,如讲座中所示(如果它不为 null,则使用 convertView,并且还使用 ViewHolder“设计模式”)。

  3. 将您创建的类的新实例设置为 listView 的适配器。

就是这样。

互联网上有很多关于如何做到这一点的例子,即使在 API 演示中也是如此。

更重要的是了解你在做什么。

于 2013-09-24T09:29:30.183 回答
1

您需要检查您的数组列表大小,例如...

Log.i("====SIZE=======","======>"+friendsDataList.size());  
adapter = new ListAdapter(MainActivity.this, friendsDataList);

在不同的类中声明您的数据。

public class Data {
String name;
String comment;
int pro_image; 
     }

在您的 ArrayList 中添加值以用于测试目的,例如..

Data data=new Data();
data.name="nidhi";
data.comment="Android developer";

friendDataList.add(data);

Data data=new Data();
data.name="Hardy";
data.comment="Android developer. Ready to help you.";

friendDataList.add(data);

在此行之前:

adapter = new ListAdapter(MainActivity.this, friendsDataList);
于 2013-09-25T08:54:39.467 回答
0

使用 BaseAdapter 或 SimpleAdapter 创建自定义适配器并覆盖 getView 方法。设计一个 xml 文件,如您要显示的行并在 getview 方法中对其进行膨胀

有关使用 BaseAdapter 的详细教程,请单击此处

于 2013-09-24T09:26:31.013 回答
0

将适配器设置为:

      public class AdptrSchedules extends BaseAdapter {
private ArrayList<Model> aList;
private Activity activity;
private LayoutInflater layoutinflater;

public AdptrSchedules(ArrayList<Model> modelValues, Activity activity) {
    super();
    this.aList = modelValues;
    this.activity = activity;

}

@Override
public int getCount() {

    return aList.size();
}

@Override
public Object getItem(int position) {

    return aList.get(position);
}

@Override
public long getItemId(int position) {

    return position;
}

public void setPositionSelected(int position) {

    this.notifyDataSetChanged();
}

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

    layoutinflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewHolder holder = null;
    Model model = aList.get(position);
    // ModelTemp employeeLocalDataModel = aListStudent.get(position);
    if (convertView == null || !(convertView.getTag() instanceof ViewHolder)) {
        convertView = layoutinflater.inflate(R.layout.row, null);
        holder = new ViewHolder();
        holder.txt = (TextView) convertView.findViewById(R.id.row_txt_name);

        holder.imgPhoto = (ImageView) convertView.findViewById(R.id.row_serch_img_photo);

        convertView.setTag(holder);
        convertView.setTag(R.id.row_serch_txt_name, holder.txtName);

        convertView.setTag(R.id.row_serch_img_photo, holder.imgPhoto);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txtArtistName.setText("" + model.getNAME());

    holder.txtDay.setText("" + scheduleDay);
    // holder.imgPhoto.setChecked(aListMalls.get(position).isSelected());

    return convertView;
}

class ViewHolder {
    TextView txtName;

    ImageView imgPhoto;
}

   }
于 2013-09-24T09:31:53.910 回答
0

它对我有用

创建 list_layout.xml 并将其传递给 listview 适配器

    private static class ListViewAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public ListViewAdapter(Context context) {

        mInflater = LayoutInflater.from(context);

    }

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

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

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

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

        ListContent holder;

        if (convertView == null) {
            convertView = mInflater
                    .inflate(R.layout.list_layout, null);

             holder = new ListContent();
            holder.text = (TextView) convertView
                    .findViewById(R.id.TextView01);


            convertView.setTag(holder);
        } else {

            holder = (ListContent) convertView.getTag();
        }

        holder.text.setText(ListviewContent.get(position));


        return convertView;

    }

    static class ListContent {
        TextView text;



    }
}

根据需要设计布局,最后将其设置为列表视图

    setListAdapter(new ListViewAdapter(this));
于 2013-09-24T09:34:48.867 回答
0

您可以在 UI 设计器空间中右键单击 listView 并选择“预览列表内容”。现在选择您要在 listView 中显示的布局内容。它会让您了解您的内容在 listView 中的外观。

于 2013-09-25T04:29:05.303 回答
-1

要创建自定义 ListView 项目,您应该扩展一个适配器类(我建议您使用 BaseAdapter 类)并在方法 getView(...) 中实例化您的布局。

一个很好的例子,使用模式 ViewHolder (This with ArrayAdapter)

http://www.jmanzano.es/blog/?p=166

另一个与 BaseAdapter

http://qtcstation.com/2012/04/a-limitation-with-the-viewholder-pattern-on-listview-adapters/

声明。模式 ViewHolder 使您的列表视图平滑,因为 findViewById 方法的使用非常非常非常慢。使用查看器,您避免使用它,仅在正确的时刻

于 2013-09-24T09:26:40.867 回答