我是新手,我試圖學習導航抽屜。我想在 Fragment 中的一個按鈕上設定一個 onClick 偵聽器,但是當我運行應用程式時,該按鈕什么也不做。
這是WeightFragment.java:`
public class WeightFragment extends Fragment {
private FragmentWeightBinding binding;
private EditText edtNumber;
private Button addBtn;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
WeightViewModel weightViewModel =
new ViewModelProvider(this).get(WeightViewModel.class);
binding = FragmentWeightBinding.inflate(inflater, container, false);
View root = binding.getRoot();
View view = inflater.inflate(R.layout.fragment_weight, container, false);
addBtn = view.findViewById(R.id.addBtn);
edtNumber = view.findViewById(R.id.edtNumber);
String weight = String.valueOf(edtNumber.getText());
SimpleDateFormat sdf = new SimpleDateFormat("'Date\n'dd-MM-yyyy HH:mm:ss");
String currentDateAndTime = sdf.format(new Date());
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(),weight currentDateAndTime, Toast.LENGTH_SHORT).show();
}
});
final TextView textView = binding.txtDate;
weightViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
@Override
public void onDestroyView() {
super.onDestroyView();
binding = null;
}
}
我試過:
public class WeightFragment extends Fragment implements View.OnClickListener
并實作該方法,但無論如何它都不起作用。
uj5u.com熱心網友回復:
這是因為您在onClickListener丟棄的視圖上設定了。
這是系結(請注意root):
binding = FragmentWeightBinding.inflate(inflater, container, false);
View root = binding.getRoot();
但是您正在將偵聽器設定在以下按鈕上:
View view = inflater.inflate(R.layout.fragment_weight, container, false);
addBtn = view.findViewById(R.id.addBtn);
addBtn.setOnClickListener(...);
最后你return root;
具有 onClick 偵聽器的視圖在那里,您創建了它,但最終它被丟棄了。
只需替換view它就binding可以了。
public View onCreateView(
@NonNull LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState
) {
WeightViewModel weightViewModel = new ViewModelProvider(this).get(WeightViewModel.class);
binding = FragmentWeightBinding.inflate(inflater, container, false);
View root = binding.getRoot();
addBtn = binding.addBtn;
edtNumber = binding.edtNumber;
String weight = String.valueOf(edtNumber.getText());
SimpleDateFormat sdf = new SimpleDateFormat("'Date\n'dd-MM-yyyy HH:mm:ss");
String currentDateAndTime = sdf.format(new Date());
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getActivity(),weight currentDateAndTime, Toast.LENGTH_SHORT).show();
}
});
final TextView textView = binding.txtDate;
weightViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);
return root;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/523318.html
上一篇:AndroidStudio將R標記為紅色,并帶有錯誤訊息“無法決議符號R”,AndroidStudio報告“URI未注冊”
