将数据从Map添加到动态创建的Views中

时间:2017-01-23 09:45:08

标签: java android android-studio view hashmap

我有方法 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);
                            }
                        }

enter image description here

0 个答案:

没有答案