如果onCreateView语句第一种观点
问题描述:
我试着去上onViewCreated
如果onCreateView语句第一种观点
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
date = (TextView) view.findViewById(R.id.textDate);
date.setText(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
}
创建if语句,其中如果视图是第一次,设置此两个线路:
date = (TextView) view.findViewById(R.id.textDate);
date.setText(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
是否有任何其他我可能没有想到和错过的方法,或者if语句在这里是更可行的方法。
下面的代码的其余部分:
public class Notifications extends Fragment {
TextView servingqueue;
TextView date;
DatabaseReference mRootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference mServingQueue = mRootRef.child("ServingQueue");
public Notifications() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mServingQueue.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Double number = dataSnapshot.getValue(Double.class);
servingqueue.setText(String.valueOf(number));
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_notifications, container, false);
// Inflate the layout for this fragmentid.queueServing);
servingqueue = (TextView) rootView.findViewById(R.id.queueServing);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
date = (TextView) view.findViewById(R.id.textDate);
date.setText(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
}
}
答
如果你只想来设置它第一时间,那么你可以检查是否savedInstanceState
为null。如果它为空,那么整个Fragment
就是崭新的品牌。如果它不为空,那么你从屏幕旋转或其他东西回来。
但是,您的TextView会突然变空,因为它会被创建,所以这里有另一个选项。
在onSaveInstanceState
,保存TextView
的状态,
@Override
public void onSaveInstanceState(Bundle b) {
super.onSaveInstanceState(b);
b.putString("DATE_TEXT", date.getText().toString());
}
然后,在你onViewCreated()
,检索像这样的文字:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String dateText = (savedInstanceState != null) ?
savedInstanceState.getString("DATE_TEXT") :
DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
date = (TextView) view.findViewById(R.id.textDate);
date.setText(DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
}
它正确地触发savedinstance。但是为什么我在第一时间做出if语句的原因是由于这两行创建的时间和日期会更新到我切换到这个片段的最后时刻。在我切换回该片段后,您的方法仍会触发时间和日期。是否有一种方法在第一个视图之后时间和日期保持静态? –
@AnonymousVagrant:不,你必须将它保存在某个地方。 – DeeV