【问题标题】:How do I use setText do set text of existing EditText item?如何使用 setText 设置现有 EditText 项目的文本?
【发布时间】:2013-11-06 15:21:19
【问题描述】:

编辑:我是个白痴,继续……

代码和xml如下。我没有收到任何错误,但没有显示文本。有人知道为什么这不起作用吗?

代码:

public boolean onPrepareMenuOptions ( Menu menu ) {
    EditText currency = (EditText) menu.findItem ( R.id.currency );
    currency.setText ( "test" );
    return true;
}

@Override
public boolean onCreateOptionsMenu ( Menu menu ) {
    getMenuInflater ().inflate ( R.menu.new_project, menu );
    return true;
}

XML:

<EditText
    android:id="@+id/currency"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/currency_summary" />

【问题讨论】:

  • 你在 onCreate 中调用了 sethasoptionmenu(true) 吗?
  • onCreate()onResume() 方法中调用时是否有效?
  • 我没有调用 sethasoptionmenu,但这似乎只适用于片段?还没到那些。一次学习一件事.. :) 把它放在 onCreate 中给出:“方法 setHasOptionsMenu(boolean) 对于 NewProjectActivity 类型是未定义的”。
  • 您是否尝试过添加return super.onPrepareOptionsMenu(menu); 而不是return true
  • 无法添加到 onCreate,“未定义类型”。

标签: android android-edittext settext


【解决方案1】:

我认为问题在于 onPrepareMenuOptions 没有被调用。这是documentation 所说的:

在 Android 2.3.x 及更低版本上,系统调用 onPrepareOptionsMenu() 每次用户打开选项菜单(按下菜单按钮)。

在 Android 3.0 及更高版本上,选项菜单始终被视为 当菜单项出现在操作栏中时打开。当一个事件 发生并且您想要执行菜单更新,您必须调用 invalidateOptionsMenu() 请求系统调用 onPrepareOptionsMenu()。

你可以通过两种方式解决这个问题:

1) 方法一:更新onCreateMenuOptions时的文本(可以直接更新xml文件)

2) 方法 2:在代码中的某处调用invalidateOptionsMenu(),就在菜单显示之前。

更新:我注意到你的代码中有一个错误,应该调用super.onPrepareMenuOptions()

public boolean onPrepareMenuOptions ( Menu menu ) {
    super.onPrepareOptionsMenu(menu); // this is important
    EditText currency = (EditText) menu.findItem ( R.id.currency );
    currency.setText ( "test" );
    return true;
}

@Override
public boolean onCreateOptionsMenu ( Menu menu ) {
    getMenuInflater ().inflate ( R.menu.new_project, menu );
    return true;
}    `

【讨论】:

  • 你是对的!我认为它是自动调用的,出于某种原因。
  • 添加对“onPrepareMenuOptions”的调用解决了这个问题。但是由于某种原因,我在“currency.setText(“test”);”这一行上得到了 NullPointerException。 Eclipse 没有抱怨。
  • 添加通话是什么意思?你能更新代码或者发布一个新问题..不确定哪个更好..?
【解决方案2】:

试试这个...

 EditText currency = (EditText) menu.findItem ( R.id.currency );
 SharedPreferences fill = getSharedPreferences("PREFS", 0);
 currency.setText ( fill.getString("string_name","String_Value" );

【讨论】:

  • 我使用 Amulya Khare 指出的方法 1 解决了上述问题。但是,现在我得到了“currency.setText”抛出的 NullPointerException。
  • stackoverflow.com/questions/13179589/…,点击此链接可能会对您有所帮助...
猜你喜欢
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多