2016-12-01 6 views
0

Es ist eine Weile her, als ich versuche, mein Problem zu lösen.Android Studio "Aktualisieren" Fragment (e) Layout von MainActivity

Ich möchte meine Fragmente Layout-Widgets, z. B. Textansichten, Bildansichten, Kartenansichten und alle anderen "aktualisieren".

Ich versuche, diese wie zu tun:

((ImageView) findViewById(R.id.BCFrame)).setImageResource(R.drawable.frame_1_6);

Aber es zeigt immer, nullObjectPointer Fehler

(Becouse diese für Beispiel CardViews in anderen Layout sind.)

Ich habe herausgefunden, dass ich sie aktualisieren kann, wenn ich irgendwo in dieses Fragment klicke, mit "onClick" -Funktion

public void RefreshUpgrade(View view){ 
    ((TextView) findViewById(R.id.PlayerUpgradeTView)).setText("Player level: " +Main.PlayerLevel[0]); 
    ((TextView) findViewById(R.id.BoxUpgradeTView)).setText("Box level: " + Main.BoxesLevel[0]); 
    ((TextView) findViewById(R.id.GarageUpgradeTView)).setText("Garage level: " + Main.GarageLevel[0]); 
    ((TextView) findViewById(R.id.GarageSlotsTView)).setText("Garage slots: " + Main.GarageSlots[0]); 
    ((TextView) findViewById(R.id.short_description222)).setText("Money: " + Main.Money[0] + "/600"); 
    ((TextView) findViewById(R.id.short_description22)).setText("Boxes Opened: " + Main.BoxesOpened[0] + "/30"); 

    if(Main.Money[0] >= 600){ 
     ((TextView) findViewById(R.id.short_description222)).setTextColor(0xff00ff00); 
    } 
} 

Aber ich brauche 2 Dinge, die nicht herausfinden können.

1.Ich müssen diese Objekte automatisch „aktualisieren“, wenn Argumente wahr sind (wenn Aussagen in MainActivity)

2.I müssen diese Objekte automatisch „aktualisieren“, nach einiger Zeit ging haben (wie GameLoop).

In Simple Java habe ich alles funktioniert, aber ich habe nur JPanels, nichts wie Fragmente.

Antwort

0

Suchen Sie in Ihrer Aktivität nicht nach dem Views, der zu dem Fragment gehört. Speichern Sie sie in Ihrer Klasse in Variablen wie z.B.

class Fragment 
private TextView playerUpgradeTextView; 

public void refreshViews(){ 
// your refreshUpgrade() method 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.yourFragmentLayout, container, false); 
     playerUpgradeTextView = (TextView) v.findViewById(R.id.PlayerUpgradeTView) 
     return v; 
    } 

Da Ihr Activity hält Ihre Fragment Sie die refreshViews Methode aufrufen kann und es Methode Parameter übergeben, wenn nötig.

Ihre zweite Frage ist eher ein klassisches periodisches Ereignis, das auch die refreshViews Methode aufruft.

+0

@trakasi Dies ist eine andere Frage, aber nicht Ihre 'ClickerFragment' erweitern' Fragment'? Ansonsten schauen Sie sich eine neue Frage an. –

+0

Danke, sieht so aus, als ob das funktioniert, aber habe ein Problem .. java.lang.NullPointerException: Versuch, die virtuelle Methode 'void com.crelix.celix.ClickerFragment aufzurufen.refreshViews() 'für einen Null-Objektverweis – trakasi

+0

Ja, es ist extends, und in der ClickerFragment-Methode werden refreshViews als "used" angezeigt (gelbe Farbe in Android Studio) – trakasi

0

Sie können versuchen, Ihr Fragment "neu aufzubauen" und es zu zwingen, onCreateView aufzurufen.

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.detach(this).attach(this).commit(); 

Für Ihre Auto-Refresh:

erstellen Handler

Handler handler = new Handler(); 

erstellen Runnable Objekt

public final Runnable runnable = new Runnable() { 

    @Override 
    public void run() { 
     // your code to refresh 
    } 
}; 

Call-Methode des Griffs r Objekt

handler.postDelayed(runnable, yourdelay); 
Verwandte Themen