如果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())); 
} 
+0

它正确地触发savedinstance。但是为什么我在第一时间做出if语句的原因是由于这两行创建的时间和日期会更新到我切换到这个片段的最后时刻。在我切换回该片段后,您的方法仍会触发时间和日期。是否有一种方法在第一个视图之后时间和日期保持静态? –

+0

@AnonymousVagrant:不,你必须将它保存在某个地方。 – DeeV