【问题标题】:Adding new item to ArrayAdapter向 ArrayAdapter 添加新项目
【发布时间】:2019-02-10 02:43:10
【问题描述】:

我想向我的arrayadapter 添加一个新项目,然后让它在我的视图中呈现。在网上挖掘后,我注意到 ArrayAdapter 类保留了自己的arraylist 版本,如下所述:Android ListView not refreshing after notifyDataSetChanged

这是我的代码:

The add new item code:

public void addRecordSet(View view) {

    RecordStats recordStats = new RecordStats();
    recordStats.RecordID = mRecord.id;

    long recordStatId = mDatabaseHelper.addRecordStats(recordStats);
    recordStats.ID = (int) recordStatId;

    recordStatsList.add(recordStats);
    mAdapter.swapRecordFormList(recordStatsList);
}

The arrayadapter code:

    public void swapRecordFormList(ArrayList<RecordStats> recordStatsList) {
        mRecordStatsList = recordStatsList;
        notifyDataSetChanged();
    }

但是,我得到了这个错误:

Process: com.example.andyxu.enzo3, PID: 19289

java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
    at java.util.ArrayList.get(ArrayList.java:437)

有什么想法吗?

编辑:

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View recordForm = convertView;
    if (recordForm == null) {
        recordForm = LayoutInflater.from(mContext).inflate(R.layout.custom_record_form, parent, false);
    }

    RecordStats currentRecord = mRecordStatsList.get(position);

    EditText reps = (EditText) recordForm.findViewById(R.id.reps);
    if (currentRecord.Reps > 0) {
        reps.setText(String.valueOf(currentRecord.Reps));
    }

    EditText weight = (EditText) recordForm.findViewById(R.id.weight);
    if (currentRecord.Weight > 0) {
        weight.setText(String.valueOf(currentRecord.Weight));
    }
    return recordForm;
}

【问题讨论】:

  • 你从哪里得到的?你能发布那个代码吗?

标签: java android


【解决方案1】:

ArrayAdapter 可以由您提供的实时列表对象支持。 (因此您引用的链接与您的情况不太相关)。使用ArrayAdapter,您只需在后备列表对象上调用add,然后调用notifyDataSetChanged

List<String> list = new ArrayList<>();
ArrayAdapter<String> adatper = new ArrayAdapter<String>(this, android.R.layout.layout, list);
listView.setAdapter(adapter);

list.add("Another item");
adapter.notifyDataSetChanged();

【讨论】:

  • 嗯...我最初是这样做的并且它有效,但是每当我添加一个新项目时,它的值默认为该列表中的前一个项目,这不是我想要的。有什么想法吗?
  • 如果getView 被覆盖,可能有问题?你能发布完整的代码吗?
  • 添加了getView 功能。 @jspcal
  • Nvm,我是个白痴。我发现了我的问题哈哈。谢谢你帮助我
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多