【问题标题】:Cannot get right data from ListView ArrayList无法从 ListView ArrayList 中获取正确的数据
【发布时间】:2020-02-21 15:12:55
【问题描述】:

我正在使用 ListView 的 ArrayList 并通过适配器添加项目。 但是在“ convertView == null ”代码之后,我无法从 arrayList 中获取正确的数据。

例如,我推送数据 , 在数组列表中, 但 arrayList[1] 返回“data0”,而不是“data1”。

在其他部分,我可以从 ArrayList 中获取正确的数据,但它只是失败了 在“ convertView == null ”代码之后。

这是我的适配器代码

public class KeikoItemAdapter extends BaseAdapter {
    private static final int ITEM_VIEW_TYPE_MAIN = 0;
    private static final int ITEM_VIEW_TYPE_YM = 1;

    final ArrayList<Keiko_item_Data> items;

    public KeikoItemAdapter (ArrayList <Keiko_item_Data> itemList){
        if ( itemList == null) {
            items = new ArrayList<Keiko_item_Data>();
        } else {
            items = itemList;
        }
    }

    public void addMainItem(String month, String date, String day, String diaryLog, String year) {
        Keiko_item_Data item = new Keiko_item_Data(month, date, day, diaryLog, year);
        item.setType(ITEM_VIEW_TYPE_MAIN);
        items.add(item);

    }

    public void addYmItem (String year, String month) {
        Keiko_item_Data item = new Keiko_item_Data(year, month);
        item.setType(ITEM_VIEW_TYPE_YM);
        items.add(item);
    }


    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return items.get(position).getType();
    }

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

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

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

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

        final Context context = parent.getContext();
        int viewType = getItemViewType(position); 

        Keiko_item_Data listViewItem = items.get(position);



        if ( convertView == null ){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            switch (viewType) {
                case ITEM_VIEW_TYPE_MAIN:
                    convertView = inflater.inflate(R.layout.keiko_item_design, parent, false);

                    Keiko_item_Data itemHolder = new Keiko_item_Data();

                    itemHolder.dayView = (TextView) convertView.findViewById(R.id.dayText);
                    itemHolder.dateView = (TextView) convertView.findViewById(R.id.dateText);
                    itemHolder.diaryView = (TextView) convertView.findViewById(R.id.diaryEdit);

                    convertView.setTag(itemHolder);

                    break;

                case ITEM_VIEW_TYPE_YM:
                    convertView = inflater.inflate(R.layout.keiko_month_item_design, parent, false);

                    Keiko_item_Data ymItemHolder = new Keiko_item_Data();

                    ymItemHolder.monthView = (TextView) convertView.findViewById(R.id.monthText);
                    ymItemHolder.yearView = (TextView) convertView.findViewById(R.id.yearText);

                    convertView.setTag(ymItemHolder);

            }

            final Keiko_item_Data finalHolder;


            switch (viewType) {
                case ITEM_VIEW_TYPE_MAIN:
                    finalHolder = (Keiko_item_Data) convertView.getTag();
                    finalHolder.dateView.setText(String.valueOf(listViewItem.getDate()));
                    finalHolder.dayView.setText(String.valueOf(listViewItem.getDay()));
                    finalHolder.diaryView.setText(listViewItem.getDiaryLog());
                   break;

                case ITEM_VIEW_TYPE_YM:
                    finalHolder = (Keiko_item_Data) convertView.getTag();
                    finalHolder.yearView.setText(String.valueOf(listViewItem.getYearData()));
                    finalHolder.monthView.setText(String.valueOf(listViewItem.getMonthData()));
                    break;

            }


            }

        return convertView;
    }
}

【问题讨论】:

  • 你添加这种类型的数据(ITEM_VIEW_TYPE_YM)吗?
  • 如果数据在一行,我放一些并在 (ITEM_VIEW_TYPE_YM) 使用它们,在 (ITEM_VIEW_TYPE_MAIN) 使用其他数据。
  • 感谢您尝试解决此问题。我从这个页面得到了答案。 link

标签: android listview arraylist adapter


【解决方案1】:

适配器的位置是相对于视图而不是列表视图的对象,这意味着它将包括ITEM_VIEW_TYPE_MAIN 视图和ITEM_VIEW_TYPE_YM 视图,您需要根据构建列表视图的方式减去位置,以便获取列表视图的正确项目

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2016-04-01
    相关资源
    最近更新 更多