2つの画面からなるシンプルなアプリケーションがあります。
最初に、EditTextビューとボタンがあります。
ユーザーがテキストを入力してボタンを押すと、メイン画面が変わり、ユーザーは入力した値と、前の宛先に戻るためのスイッチボタンを確認できます。
問題は、ユーザーが何も入力せずにボタンを押した場合です。「文字列が空です」という例外があります。
textChangedListenerを使用してみましたが、機能しません。最初の画面は、型付きの値を格納するためのViewModelオブジェクトとMutableLiveDataオブジェクトで構成されています。
コードは次のとおりです。
メインスクリーン:
public class MainFragment extends Fragment {
private MainViewModel mViewModel;
public static MainFragment newInstance() {
return new MainFragment();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.main_fragment, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mViewModel = new ViewModelProvider(this).get(MainViewModel.class);
// TODO: Use the ViewModel
EditText editText = getView().findViewById(R.id.valueEntry);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
return;
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
mViewModel.setValue(Float.valueOf(editText.getText().toString()));
}
@Override
public void afterTextChanged(Editable editable) {
return;
}
});
Button button = getView().findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
MainFragmentDirections.MoveToSecond action = MainFragmentDirections.moveToSecond( );
action.setVal(mViewModel.getValue());
Navigation.findNavController(view).navigate(action);
}
});
}
ViewModelインスタンス:
public class MainViewModel extends ViewModel {
private MutableLiveData<Float> value = new MutableLiveData<>();
public void setValue(Float c){value.setValue(c);}
public Float getValue()
{
return value.getValue();
}
ユーザーがボタンを押したときにこのコードを使用します
if (!entered_sting.equals(""))
{
// show text to other works
}
最初のボタン押下イベントでこれを使用します
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加