Я использую Tab Layout в своем приложении, и у меня есть кнопка, которая запускает таймер, а затем останавливает его. Проблема в моем фрагменте-заполнителе. Я могу найти только текстовые представления в моем методе onCreateView (), используя root .FindViewById.
Конечно, я не могу получить доступ к root вне метода onCreateView (). Есть ли способ go обойти эту проблему? Вот мой код заполнителя:
public class PlaceholderFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private PageViewModel pageViewModel;
Context thiscontext;
TextView timerView;
long startTime = 0;
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@SuppressLint("DefaultLocale")
@Override
public void run() {
long millis = System.currentTimeMillis() - startTime;
int seconds = (int) (millis / 1000);
int minutes = seconds / 60;
seconds = seconds % 60;
timerView.setText(String.format("%d:%02d", minutes, seconds));
timerHandler.postDelayed(this,500);
}
};
public static PlaceholderFragment newInstance(int index) {
PlaceholderFragment fragment = new PlaceholderFragment();
Bundle bundle = new Bundle();
bundle.putInt(ARG_SECTION_NUMBER, index);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageViewModel = ViewModelProviders.of(this).get(PageViewModel.class);
int index = 1;
if (getArguments() != null) {
index = getArguments().getInt(ARG_SECTION_NUMBER);
}
pageViewModel.setIndex(index);
}
@Override
public View onCreateView(
@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_main, container, false);
thiscontext = container.getContext();
final TextView textView = root.findViewById(R.id.section_label);
pageViewModel.getText().observe(this, new Observer<String>() {
@Override
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
timerView = (TextView) root.findViewById(R.id.hoursConnected);
Button b = root.findViewById(R.id.b);
b.setText("start");
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Button b = (Button) v;
if(b.getText().equals("stop")){
timerHandler.removeCallbacks(timerRunnable);
b.setText("start");
}else{
startTime = System.currentTimeMillis();
timerHandler.postDelayed(timerRunnable, 0);
b.setText("stop");
}
}
});
return root;
}
----------------// HERE IS THE PROBLEM //----------------------------------------------------------------
@Override
public void onPause(){
super.onPause();
timerHandler.removeCallbacks(timerRunnable);
Button b = findViewById(R.id.b); ----------------// THIS IS NOT WORKING //----------------
b.setText("start");
}