Android - 在自定义布局视图中填充ArrayList对象

时间:2016-08-10 18:51:54

标签: android listview arraylist android-arrayadapter

我很难理解这应该如何运作。我有一个方法getAllNotes() DatabaseHandler类中返回 ArrayList ,当我尝试循环遍历 ArrayList 时,它正常工作此: -

    for (Note note : notes) {
        String log = "Id: " + note.getID() + " ,Title: " + note.getTitle() + " ,Description: " + note.getDescription();
        Log.d("Notes: ", log);
    }

这就是方法的样子

DatabaseHandler.java enter image description here

现在我需要将这些数据填充到列表视图中。经过一些搜索工作后,我发现我需要对数组中的每个对象(ID,标题,描述)使用 ArrayAdapter 自定义布局和textview。

我无法完全理解 ArrayAdapter 应该如何运作。

MainActivity.java enter image description here

1-为什么我需要将 setAdapter 定义为 listview ,我已经拥有自定义列表视图

2- ArrayAdapter 要求资源ID为 TextView ,并且我的自定义列表视图布局中有多个textview !!

3-结果看起来很奇怪,我想我会有一个只有标题的简单列表,但这就是我得到的。

enter image description here

1 个答案:

答案 0 :(得分:0)

创建自己的适配器类。

更改ArraList中的modeClass 在getView()

中更改布局

快速示例:

private ArrayList<MenuModel> menuModels;
private Context context;

public MenuAdapter(ArrayList<MenuModel> menuModels, Context context) {
    this.menuModels = menuModels;
    this.context = context;
}

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

@Override
public Object getItem(int position) {
    return menuModels.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MenuModel menuModel = menuModels.get(position);
    ViewHolder viewHolder;

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.item_menu, parent, false);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.textView.setText(menuModel.getTitle());
    viewHolder.image.setImageResource(menuModel.getResourceIcon());

    return convertView;
}

private static class ViewHolder {
    ImageView image;
    TextView textView;

    public ViewHolder(View view) {
        image = (ImageView) view.findViewById(R.id.);
        textView = (TextView) view.findViewById(R.id.menuTitle);
    }
}

}