首页 > 解决方案 > 调用 notifyDataSetChanged() 后如何在列表视图中设置文本

问题描述

场景:我有一个ListView,当用户点击一个孩子时,它通过主活动设置ListView内的TextView的值。

我有一个FloatingActionButton,它添加和减去一个对象来计算ListView中的项目数量。

要添加或减去ListView显示的子项数量,我调用notifyDataSetChanged().

我正在尝试在调用后将输入的文本设置回TextViewnotifyDataSetChanged()


问题: notifyDataSetChanged()在完成运行后将 TextView 重置回空白。

我试过的:我试过将ListView项目中的所有值保存到一个单独的文件中,并在TextViewString[] savedItems中设置文本。我已经在调试器中逐步运行代码,看到代码正在保存文本并实际设置文本,但由于某种原因,尚未完成其工作。notifyDataSetChanged()

完成后如何设置文本notifyDataSetChanged()


有问题的代码:

public void addNewThought(int numberOfThoughts) {
    String[] savedDistortionsList = saveDistortions(); // This saves each childs text

    selectedItems[numberOfThoughts] = new ArrayList<String>();
    IntegerNumberOfThoughts.add(Integer.toString((numberOfThoughts++)) ); // Just the variable that counts the number of children needed in ListView

    distortionsAdapter.notifyDataSetChanged(); // Refresh ListView
    setBackDistortionsList(savedDistortionsList); // Put back text into ListView
}

saveDistortions()有效,所以我认为没有必要显示,但这是setBackDistortionsList()我测试过的代码,它实际上是在 ListView 中设置 TextView,但由于某种原因它没有显示。

setBackDistortionsList

private void setBackDistortionsList(String[] savedDistortionsList) {
    View tempView;
    TextView tempTextView;
    for (int i = 0; i < savedDistortionsList.length; i++) {
        tempView = LDistortions.getChildAt(i);
        tempTextView = (TextView) tempView.findViewById(R.id.textEntry);
        tempTextView.setText(savedDistortionsList[i]);
    }
}

标签: javaandroidlistviewnotifydatasetchanged

解决方案


答案在这里找到: 如何检查我的 ListView 何时完成重绘?

从用户@Petro 复制和粘贴

希望这可以帮助:

  • 在列表视图上设置 addOnLayoutChangeListener
  • 调用 .notifyDataSetChanged();
  • 一旦完成,这将触发 OnLayoutChangeListener
  • 移除监听器
  • 在更新时执行代码 ( getLastVisiblePosition())

    mListView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    
      @Override
    public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
        mListView.removeOnLayoutChangeListener(this);
        Log.e(TAG, "updated");
      }
    });
    
    mAdapter.notifyDataSetChanged();
    

推荐阅读