2016-11-12 3 views
0

Im пытается создать если заявление на 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())); 
} 

причем, если точка зрения в первый раз, установите эту двухлинейный:

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 является недействительным. Если это значение равно нулю, тогда весь Fragment станет новым брендом. Если это не null, то вы возвращаетесь с вращением экрана или что-то в этом роде.

Однако ваш 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

Смежные вопросы