gpt4 book ai didi

java - Android LiveData 未更新

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:28 28 4
gpt4 key购买 nike

我目前正在尝试从 fragment 中检测另一个文件中的更改,并使用 LiveData 相应地更新 ui。我有一个类 - datacontroller,带有用于我的应用程序数据的 getters 和 setters。在下面的代码中,我希望每次用户添加一项技能时,单独 fragment 中的 UI 都会发生变化。如果有人能指出为什么我的用户界面没有更新以及如何修复它,我将不胜感激?

技能的getter是:位于dataController类中,扩展了ViewModel

private MutableLiveData<List> skillMutable = new MutableLiveData<List>();
public MutableLiveData<List> getSkills(){
ArrayList<skill> listToReturn = new ArrayList<skill>();

try {
InputStream inputStream = context.openFileInput(skillFileName);

if (inputStream != null) {
InputStreamReader streamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(streamReader);

String l;
skill toAdd;
while (( l = bufferedReader.readLine()) != null) {

System.out.println("MY line is" + l);
String[] skillSeparated = l.split("_");
toAdd= new skill(skillSeparated[0], skillSeparated[1]);
listToReturn.add(toAdd);
}

}

inputStream.close(); //close the file
} catch (java.io.FileNotFoundException e) {
//file doesnt exist
} catch (IOException e) {
e.printStackTrace();
}
skillMutable.setValue(listToReturn);
return skillMutable;
}

更新 UI 的代码是:这里,它位于扩展 Fragment 的类中

dataManager = new dataController(getContext());

dataManager.getSkills().observe(this, skillMutable -> {
// update UI
if(dataManager.getResumeNumber() == "1") {
resumeWebview.loadData(pdfManager.getResume1(), "text/html; charset=utf-8", "UTF-8");
}
});

最佳答案

skillMutable的值在 observe() 之前设置方法被调用。 observe()必须在设置值之前调用方法。否则,没有任何观察skillMutable当其值发生变化时。

要使其正常工作,您可以做的最起码的事情就是使 skillMutable公开然后调用observe()在调用 getSkills() 之前先进行此操作.

顺便说一句,我不知道为什么 MutableLiveData这里需要。可以getSkills()方法返回ArrayList<skill>而不是返回MutableLiveData<List>

关于java - Android LiveData 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635648/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com