2016-12-01 172 views
0

當我試圖找出我的問題時,已經有一段時間了。從MainActivity Android Studio「刷新」片段佈局

我想要「刷新」我的片段佈局小部件,例如textviews,imageviews,cardviews和其他所有。

我試圖做到這一點,如:

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

但是,它總是顯示,nullObjectPointer錯誤

(Becouse這些對於 例如CardViews在其他佈局。)

我已經想通了,我可以刷新它們,當我點擊該片段中的某處時,使用「onClick」功能

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); 
    } 
} 

但我需要2件事,那是無法弄清楚的。

1.I需要這些對象「刷新」自動,如果參數是真(如果MainActivity語句)

2.我需要這些對象「刷新」自動,經過一段時間後都去了(像GameLoop )。

在簡單的Java我得到了這一切工作,但在那裏我只有JPanels,沒有像片段。

回答

0

請勿在您的活動中搜索屬於片段的Views。在你的Fragment類中,它們存儲在諸如例如

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; 
    } 

由於您Activity握着你的Fragment可以調用refreshViews方法,如果需要傳遞方法參數。

第二個問題更多的是一個經典的週期性事件,它也稱爲refreshViews方法。

+0

@trakasi這是一個不同的問題,但你的'ClickerFragment'擴展'Fragment'?否則,看看打開一個新的問題。 –

+0

謝謝,看起來像這是工作,但得到了問題.. java.lang.NullPointerException:嘗試調用虛擬方法'void com.crelix.crelix.ClickerFragment。refreshViews()'空對象引用 – trakasi

+0

是的,它是擴展的,並且在ClickerFragment方法中,refreshViews顯示爲「used」(Android Studio中的黃色) – trakasi

0

你可以嘗試「重建」你的片段並強制它調用onCreateView

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

爲您自動刷新:

創建一個處理程序

Handler handler = new Handler(); 

創建Runnable對象句柄的

public final Runnable runnable = new Runnable() { 

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

調用方法r對象

handler.postDelayed(runnable, yourdelay);