2016-04-03 21 views
-1

Bir değişkenin durumunu bir parçanın onSaveInstanceState() ile kaydetmeye çalışıyorum. kaydetmeye çalıştığım değişken, programımdaki başka bir sınıfta oluşturulur, ancak her zaman 0 (başlangıç ​​değeri) olarak okunur. Değişken değerini arttırdığım gerçeğini biliyorum. Değişkenin gerçek değerini nasıl alabilirim? Bu benim kodudur:Başka bir Sınıftan değişken değer elde etme parçası

public class ObjectivesActivity extends Fragment { 
//Variables 
ObjectivesLogic objectivesLogic = new ObjectivesLogic(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // retain this fragment 
    System.out.println("savedInstanceState: " + savedInstanceState); 
    if (savedInstanceState != null) { 
     // Restore last state for checked position. 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.activity_objectives, container, false); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    if (objectivesLogic.getCount()>0){ 
     objectivesLogic.restoreFragment(); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    int save = objectivesLogic.getCount(); 
    System.out.println("save: "+save); 
    outState.putInt("Count",save); 
} 


} 

ve bu değişken yaratıyorum nerede:

public class ObjectivesLogic extends AppCompatActivity { 
//Variables 
int count = 0; 
View savedLinearLayoutView = null; 
Context savedContext = null; 
public void addObjective(Context context, View linearLayoutView) { 
    savedContext = context; 
    savedLinearLayoutView = linearLayoutView; 
    if (count < 8) { 
     EditText editText = new EditText(context); 
     LinearLayout linearLayoutObjectives = (LinearLayout) linearLayoutView; 
     editText.setId(R.id.edit_text_); 
     linearLayoutObjectives.addView(editText); 
     count++; 
    } 
} 
public void restoreFragment(){ 
    for(int i=0; i<count;i++){ 
     EditText editText = new EditText(savedContext); 
     LinearLayout linearLayoutObjectives = (LinearLayout) savedLinearLayoutView; 
     editText.setId(R.id.edit_text_); 
     linearLayoutObjectives.addView(editText); 
     count++; 
    } 
} 
public int getCount() { 
    return count; 
} 
} 

GetCount() her zaman 0. Yardımlarınız :)

+0

"Mantık" nesnesinin Parcelable sürümünü oluşturmanızı ve böylece kaydetmenizi ve durum paketine geri yüklemenizi öneririm. "Mantıksal" nesneniz, gerçekten bir etkinlik değilse, herhangi bir etkinlik sınıfından miras almalıdır. ID'leri programlı olarak oluşturulmuş görünümler için ayarlama, kimliklerin yalnızca XML Kodu boşluğunu kapatmak için kullanıldığından, mantıklı değildir. Çok ciddi bir bellek sızıntısına yol açabileceğinden, bir Bağlam örneğini tutmaya çalışmayın. – Machinarius

+0

Teşekkür ederiz Machinarius! –

+0

Her zaman yardımcı olmaktan mutluluk duyarız – Machinarius

cevap

0

You için teşekkür ederiz alır Ben ettik outState.putInt("Count",save);

@Override 
public void onSaveInstanceState(Bundle outState) { 
    int save = objectivesLogic.getCount(); 
    System.out.println("save: "+save); 
    outState.putInt("Count",save); 

    super.onSaveInstanceState(outState); 

} 
+0

Bu gerçekten bir neden değil. '' Super.onSaveInstanceState (outState); '' herhangi bir zamanda (ya da hiç önerilmez) tavsiye edebilir ve bir parsel nesnesinden kaydetme/geri yükleme işlemi yine de işe yarayacaktır. – Machinarius

+0

@Machinarius [SaveState] 'a bakıyordum (http://developer.android.com/training/basics/activity-lifecycle/recreating.html#SaveState) ... o zaman önerilen yol nedir? (gerçekten merak uyandırıcı) –

+0

Gerçekten de '' super.onSaveInstanceState (outState) 'i çağırmalısınız; '' ancak gerçekten isteğe bağlı AFAIK, eğer buna çağrı yapmazsanız, UI durumunuz hiçbir zaman geri yüklenmeyecek ve yeni aktiviteler sıfırdan başlayacak fakat bir hataya yol açmamalıdır. – Machinarius

1

İki sorunların önüne super.onSaveInstanceState(outState); diyorsun kodlarınızda görülmesi gereken çözüm.

  • ObjectivesLogic sınıfı gibi gerek yoktur görünür Activity sınıfı, genişletmektedir. Ayrıca, hiç bir zaman Activity'u uzatarak bir sınıfı başlatmamalısınız, bu Android çerçevesi tarafından yapılmalıdır, siz değil.

  • Yalnızca şu değişkeni kaydediyorsunuz: outState.putInt("Count",save);. Geri yükleme hakkında bir şey göremedim.

İlgili konular