标签切换后 TextView 忘记了它的值
TextView forgets its value after tab switching
我在我的程序中设置了一个 tabhHost,其中包含 3 个选项卡,每个选项卡的内容中都有一个包含 textView 的片段。我在应用程序中设置了一个按钮,该按钮应该更新每个选项卡的内容。然而,我现在面临的问题是,如果我更改一个选项卡,它的内容就会被遗忘,并且新选项卡也没有任何价值,除非我再次单击该按钮。每个选项卡内容都有不同的 class 但在每个选项卡中 class 只是 returns 带有文本视图的视图。我假设在每个视图上重置的值都会膨胀,但是我找不到合理的方法让它按照我的意图工作。
这是我的按钮使用 运行 方法的部分代码:
public void getNum(View view) {
proteinNeeded = weightNum.getValue() * FirstActivity.weightMultiplier;
carbohydrateNeeded = weightNum.getValue() * 5;
switch (weightMultiplier) {
case 2: {
resultTxt = String.format("Zapotrzebowanie:%nBiałko - %dg.%nWęglowodany - %dg.%n",
FirstActivity.proteinNeeded, FirstActivity.carbohydrateNeeded);
FragmentTab.tv.setText(resultTxt);
FragmentTab2.dietTxt = String.format("text1");
FragmentTab2.tv.setText(FragmentTab2.dietTxt);
FragmentTab3.foodTxt = String.format("text2");
FragmentTab3.tv.setText(FragmentTab3.foodTxt);....
这里是来自 FragmentTab.java 的代码,每个选项卡都有或多或少相同的代码,所以我现在 post 只有这个:
public class FragmentTab extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static View v;
public static TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_layout, container, false);
tv = (TextView) v.findViewById(R.id.textResult);
if (tv != null) {
tv.setText("nothing has been input yet");
}
return v;
}
}
TL;DR - 如何将我的值保存在 textView 中,以便如果我的文本得到更新,它不会在视图刷新后恢复为默认值?
解决您问题的一个方法是使用 SQLite 数据库保存您的数据,并在您 return 到该选项卡时从数据库中获取数据。
你可以参考这篇link。 Saving Data in SQL Databases.
有关其他 android 存储选项,请参阅本系列视频。 Android Data Storage Options.
我在我的程序中设置了一个 tabhHost,其中包含 3 个选项卡,每个选项卡的内容中都有一个包含 textView 的片段。我在应用程序中设置了一个按钮,该按钮应该更新每个选项卡的内容。然而,我现在面临的问题是,如果我更改一个选项卡,它的内容就会被遗忘,并且新选项卡也没有任何价值,除非我再次单击该按钮。每个选项卡内容都有不同的 class 但在每个选项卡中 class 只是 returns 带有文本视图的视图。我假设在每个视图上重置的值都会膨胀,但是我找不到合理的方法让它按照我的意图工作。
这是我的按钮使用 运行 方法的部分代码:
public void getNum(View view) {
proteinNeeded = weightNum.getValue() * FirstActivity.weightMultiplier;
carbohydrateNeeded = weightNum.getValue() * 5;
switch (weightMultiplier) {
case 2: {
resultTxt = String.format("Zapotrzebowanie:%nBiałko - %dg.%nWęglowodany - %dg.%n",
FirstActivity.proteinNeeded, FirstActivity.carbohydrateNeeded);
FragmentTab.tv.setText(resultTxt);
FragmentTab2.dietTxt = String.format("text1");
FragmentTab2.tv.setText(FragmentTab2.dietTxt);
FragmentTab3.foodTxt = String.format("text2");
FragmentTab3.tv.setText(FragmentTab3.foodTxt);....
这里是来自 FragmentTab.java 的代码,每个选项卡都有或多或少相同的代码,所以我现在 post 只有这个:
public class FragmentTab extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static View v;
public static TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_layout, container, false);
tv = (TextView) v.findViewById(R.id.textResult);
if (tv != null) {
tv.setText("nothing has been input yet");
}
return v;
}
}
TL;DR - 如何将我的值保存在 textView 中,以便如果我的文本得到更新,它不会在视图刷新后恢复为默认值?
解决您问题的一个方法是使用 SQLite 数据库保存您的数据,并在您 return 到该选项卡时从数据库中获取数据。
你可以参考这篇link。 Saving Data in SQL Databases.
有关其他 android 存储选项,请参阅本系列视频。 Android Data Storage Options.