活动未正确更新

时间:2013-04-14 04:15:55

标签: android android-layout

我是android的新手,所以也许我正在做一些可怕的错误。我希望有一个特定的Activity,它显示有关游戏“Creature”类实例的详细信息。姓名,受到的伤害,等等。

我在使GUI对象中正确显示生物数据时遇到问题。在初始创建时(它应该将生物的名称复制到名称字段中)和添加损坏标记时(不更新以显示正确的图像)。

这是我的小例子:

public class CreatureDetailActivity2 extends Activity
{
  Creature creature;

  public void addMark(View v)
  {
    // connected to the button via android:onClick="addMark" in the XML
    creature.getTrack().addDamage(DamageType.Normal, 1);
    refreshDisplay();
    new AlertDialog.Builder(this).setTitle(creature.getName())
        .setMessage(creature.getTrack().toString()).show();
  }

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_creature_detail);
    creature = new Creature("Example");
    refreshDisplay();
  }


  public void refreshDisplay()
  {
    final View creatureDetailView = this.getLayoutInflater().inflate(
        R.layout.activity_creature_detail, null);

    final EditText nameField = (EditText) (creatureDetailView
        .findViewById(R.id.textbox_creature_name));
    nameField.setText(creature.getName());

    final ImageView damageBox0 = (ImageView) (creatureDetailView.findViewById(R.id.damageBox0));
    damageBox0.setImageResource(R.drawable.__n);
    // in the full program this does the same for 0 through 9, but this is a sample
    // also, in the full program, this is a dynamic lookup for the correct pic
    // but again, this is just a sample version.
  }
}

现在的问题是应用程序将加载并启动,但之后没有任何小部件会正确更新。您可以单击该按钮,它将显示AlertDialog,并且AlertDialog的文本将更改,但活动中的文本字段将不会更改,并且ImageView在任何时候都不会从它开始时更改到它应该改变的那个。

所以我非常难过。如果我遗漏一些重要的东西,我可以发布更多关于项目设置的信息,但我甚至不确定问题是什么,所以我不确定在我的问题中还包括什么。

2 个答案:

答案 0 :(得分:2)

final View creatureDetailView = this.getLayoutInflater().inflate(
        R.layout.activity_creature_detail, null);

将您的Activity的布局基本上没有任何内容,只需返回View of inflated即可。 setContentView实际上是将您的布局扩展到Activity的View层次结构中。

一旦你给布局充气,你就不需要再做了。只需使用findViewById而不引用悬挂的未附加视图。

将refreshDisplay方法更改为:

public void refreshDisplay()
{
    final EditText nameField = (EditText) findViewById(R.id.textbox_creature_name);
    nameField.setText(creature.getName());

    final ImageView damageBox0 = (ImageView) findViewById(R.id.damageBox0);
    damageBox0.setImageResource(R.drawable.__n);
    // in the full program this does the same for 0 through 9, but this is a sample
    // also, in the full program, this is a dynamic lookup for the correct pic
    // but again, this is just a sample version.
}

答案 1 :(得分:1)

没有任何改变,因为你完全错了。

如果您希望更新当前活动的任何视图元素,请执行此操作

View v = findViewById(R.id.element);
v.setText("text");

这只是一个简单的例子。 您需要将返回的元素强制转换为正确的类型,以便能够访问所有可用的方法。

你做错了是试图再次给布局充气。