我做了一个非常基本的加权平均计算器作为Android应用程序(在Java中),它工作得很好。
用户只需在三个EditText
中输入3个值a
、b
、c
,然后计算公式:
d = 0.25 * a + 0.25 * b + 0.5 * c;
这个数学方程的结果显示在TextView
中,所有这些都在按下一个按钮时显示在MainActivity
中。
但在创建了一个新项目以获得更好的UI(使用Android Studio模板Navigation Drawer Activity)后,我意识到我的代码无法正常工作。
我如何修改计算器,以便在我的片段(名为CalculatorWeightedFragment
)中获取输入,从而进行计算,并在按下按钮时在同一片段的TextView中显示结果?
在这一点上,我得到的只是一些静态的显示,没有为按钮分配任何操作。
代码如下:
计算器加权片段.java
public class CalculatorWeightedFragment extends Fragment {
private CalculatorWeightedViewModel calculatorWeightedViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
calculatorWeightedViewModel =
ViewModelProviders.of(this).get(calculatorWeightedViewModel.class);
View root = inflater.inflate(R.layout.fragment_calculator_w, container, false);
final TextView textView = root.findViewById(R.id.id_result); // result d stored in id_result
calculatorWeightedViewModel.takeText().observe(getViewLifecycleOwner(),
new Observer<String>() {
@Override
public void onChanged(@Nullable String str) {
textView.setText(str);
}
});
return root;
}
}
计算器加权视图模型.java
public class CalculatorWeightedViewModel extends ViewModel {
private MutableLiveData<String> testString;
public CalculatorWeightedViewModel() {
testString = new MutableLiveData<>();
testString.setValue("" + 0.5);
}
public LiveData<String> takeText() {
return testString;
}
}
2条答案
按热度按时间kcrjzv8t1#
基于xml布局内容:
示例1(不含
LiveData
和ViewModel
)我创建一些新的简单片段(作为示例)
示例2(使用
LiveData
和ViewModel
)当你使用
LiveData
和ViewModel
时,你不需要在你的Fragment
中按按钮。你可以观察到所有的变化。要在其中创建此片段的Activity。若要在片段中包含ViewModel,可以使用依赖项注入(例如,使用Dagger库)或从
ViewModelProviders
(或AndroidViewModelFactory
)获取它。在这里,为了使示例尽可能简单,我通过构造函数传递它。
活动
视图模型
你可以将你的值(
a
,b
,c
)存储为不同用途的字段。在这里,我重新计算结果的现场,没有任何额外的字段。使它尽可能简单。片段:
另外,您可以为每个字段创建单独的侦听器。在这里,我为所有字段使用一个侦听器(名为
TextWatcher listener
)。它的工作原理应该是这样的:
a11xaf1n2#
你必须在每次编辑中使用textwatcher text