我有方法 CreateView ,它动态创建View并使用SharedPrefernces文件中的数据填充它们。
首先 (文件loadFile:loadFiles)正常工作。它填充创建的View中的字段中的数据,100%位于SharedPrefernces文件中。
第二个 for (Map.Entry条目:usersPresets.getAll()。entrySet())。它填充创建的视图中的数据,但不填充它们在SharedPrefences文件中的事实。在这里我遇到了问题。
public void CreateView(File[] loadFiles) {
if (presetsStorage.exists()) {
for (File loadFile : loadFiles) {
//noinspection SpellCheckingInspection
if (!loadFile.getName().contains("userpreset_")) {
//noinspection UnnecessaryContinue
continue;
} else {
if (loadFile.isFile()) {
String presetsName = loadFile.getName();
presetsName = presetsName.substring(0, presetsName.length() - 4);
usersPresets = getSharedPreferences(presetsName, MODE_PRIVATE);
presetsContainer = (LinearLayout) findViewById(R.id.presetsContainer);
View userPresetsView = getLayoutInflater()
.inflate(R.layout.preset_fragment, presetsContainer, false);
userPresetsView.findViewById(R.id.presetFragMenubtn)
.setOnClickListener(viewClickListener);
((CircularSeekBar) userPresetsView.findViewById(R.id.presetFragA)).
setProgress(usersPresets.getInt("a", 0));
((CircularSeekBar) userPresetsView.findViewById(R.id.presetFragB)).
setProgress(usersPresets.getInt("b", 0));
((CircularSeekBar) userPresetsView.findViewById(R.id.presetFragC)).
setProgress(usersPresets.getInt("c", 0));
TextView presetFragName = (TextView) userPresetsView
.findViewById(R.id.userPresetName);
presetFragName.setText(presetsName);
presetFragName.setOnClickListener(viewClickListener2);
presetsContainer.addView(userPresetsView);
presetFragName.setText(presetsName.substring(11));
//HERE I HAVE A PROBLEM
for (Map.Entry<String, ?> entry : usersPresets.getAll().entrySet()) {
if (arr.contains(entry.getKey())) {
// noinspection UnnecessaryContinue
continue;
} else {
CardView flavor_cardView = (CardView) findViewById(R.id.flavor_cardView);
final View usersFlavorsPreset = getLayoutInflater()
.inflate(R.layout.preset_userflavor_fragment, flavor_cardView, false);
((TextView) usersFlavorsPreset.findViewById(R.id.tvUserFlavorPresetName))
.setText(entry.getKey());
((TextView) usersFlavorsPreset.findViewById(R.id.tvUserFlavorPresetValue)).
setText(String.valueOf(entry.getValue()));
flavor_cardView.addView(usersFlavorsPreset);
}
}
}
}
}
}
}
我需要在存在这些数据时创建一个新行,具体取决于SharedPrefernces中的数据量。现在,它可以工作,但只创建一行,值只会重写并显示第二次 的最后一次迭代中的数据。
屏幕截图,我试图解释这个问题:
查看 - screenshot
aaa.xml的内容 - screenshot 2
test.xml的内容 - screenshot 3
请告诉我,我需要将放置在中,以便在同一位置不会覆盖值。 我希望至少解释一下可以理解。如果你不知道 - 我会再次尝试描述这个问题。
UPDATE :我在CardView中添加了LinearLayout,现在所有元素都显示在一个地方。另一个问题 - 如何将它们放在正确的方框中?
for (Map.Entry<String, ?> entry : usersPresets.getAll().entrySet()) {
if (arr.contains(entry.getKey())) {
// noinspection UnnecessaryContinue
continue;
} else {
LinearLayout flavor_linear = (LinearLayout) findViewById(R.id.flavor_linear);
final View usersFlavorsPreset = getLayoutInflater().
inflate(R.layout.preset_userflavor_fragment, flavor_linear, false);
((TextView) usersFlavorsPreset.
findViewById(R.id.tvUserFlavorPresetName)).setText(entry.getKey());
((TextView) usersFlavorsPreset.
findViewById(R.id.tvUserFlavorPresetValue)).setText(String.valueOf(entry.getValue()));
flavor_linear.addView(usersFlavorsPreset);
}
}