我是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在任何时候都不会从它开始时更改到它应该改变的那个。
所以我非常难过。如果我遗漏一些重要的东西,我可以发布更多关于项目设置的信息,但我甚至不确定问题是什么,所以我不确定在我的问题中还包括什么。
答案 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");
这只是一个简单的例子。 您需要将返回的元素强制转换为正确的类型,以便能够访问所有可用的方法。
你做错了是试图再次给布局充气。