MainActivity

时间:2016-12-01 13:03:59

标签: android android-layout android-fragments

当我试图找出问题时,已经有一段时间了。

我想“刷新”我的片段布局小部件,例如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,没有像片段一样。

2 个答案:

答案 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);