当我试图找出问题时,已经有一段时间了。
我想“刷新”我的片段布局小部件,例如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);
}
}
但是我需要两件事,但是无法理解。
1.如果参数为true(如果MainActivity中有语句),我需要这些对象自动“刷新”
2.我需要这些对象在一段时间后自动“刷新”(像GameLoop)。
在简单Java中我把这一切都搞定了,但是我只有JPanels,没有像片段一样。
答案 0 :(得分: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
方法。
答案 1 :(得分:0)
您可以尝试“重建”您的片段,并强制它调用onCreateView
。
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commit();
自动刷新:
创建处理程序
Handler handler = new Handler();
创建可运行对象
public final Runnable runnable = new Runnable() {
@Override
public void run() {
// your code to refresh
}
};
处理程序对象的调用方法
handler.postDelayed(runnable, yourdelay);