0

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

代码和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" />
4

2 回答 2

1

我认为问题在于onPrepareMenuOptions没有被调用。这是文档中的内容:

在 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;
}    `
于 2013-11-06T15:35:39.010 回答
0

尝试这个...

 EditText currency = (EditText) menu.findItem ( R.id.currency );
 SharedPreferences fill = getSharedPreferences("PREFS", 0);
 currency.setText ( fill.getString("string_name","String_Value" );
于 2013-11-06T15:55:31.333 回答