2016-11-12 27 views
0

我試着去上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())); 
} 

} 

回答

0

如果你只想來設置它第一時間,那麼你可以檢查是否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