如何在 onOptionsItemSelected 中引用 onLoadFinished 的变量?
How to reference to a variable from onLoadFinished in onOptionsItemSelected?
在这个 onLoadFinished 方法中,我获取特定数据库列的内容并将其设置在 EditView (mEditView) 上,其 id 已在 OnCreate 方法中定义:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
if (cursor.moveToFirst())
{
int textColumnIndex = cursor.getColumnIndex(NoteEntry.COLUMN_TEXT);
String content = cursor.getString(textColumnIndex);
mEditView.setText(content);
}
现在我需要在这个方法之外使用变量"content"。比如我写了一个方法,让包含"content"的吐司信息出现在屏幕上:
private void displayContent(String content)
{
Toast.makeText(this, content, Toast.LENGTH_SHORT).show();
}
我希望在单击 Actionbar 菜单按钮时显示此 toast。但是这里面临一个问题——当我在 OnOptionsItemSelected 中包含 displayContent(String content) 时,我得到一个错误,因为变量 "content" 没有被识别。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.display_toast:
displayContent(String text);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
将 "String content" 作为第二个输入传递给 onOptionsItemSelected 也无法解决问题。我是 Android 编程新手,尽管花了很多时间在网上搜索解决方案,但我找不到答案。所以我将非常感谢任何帮助。
行 displayContent(String text)
基本上是创建一个新的变量文本,然后将其提供给方法,因此它是空的。您必须将该变量保存为 Activity 中的全局变量,然后您可以在 onOptionItemSelected 中访问它。所以它会是这样的:
public class MyActivity extends Activity {
private String content;
然后稍后在 onLoadFinished 中你不创建一个新变量你使用那个
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
if (cursor.moveToFirst())
{
int textColumnIndex = cursor.getColumnIndex(NoteEntry.COLUMN_TEXT);
content = cursor.getString(textColumnIndex);
mEditView.setText(content);
}
然后在 onOptionItemSelected 中使用内容作为方法的参数:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.display_toast:
displayContent(content);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
研究局部变量和全局变量之间的区别,这对您来说很有意义。
在这个 onLoadFinished 方法中,我获取特定数据库列的内容并将其设置在 EditView (mEditView) 上,其 id 已在 OnCreate 方法中定义:
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
if (cursor.moveToFirst())
{
int textColumnIndex = cursor.getColumnIndex(NoteEntry.COLUMN_TEXT);
String content = cursor.getString(textColumnIndex);
mEditView.setText(content);
}
现在我需要在这个方法之外使用变量"content"。比如我写了一个方法,让包含"content"的吐司信息出现在屏幕上:
private void displayContent(String content)
{
Toast.makeText(this, content, Toast.LENGTH_SHORT).show();
}
我希望在单击 Actionbar 菜单按钮时显示此 toast。但是这里面临一个问题——当我在 OnOptionsItemSelected 中包含 displayContent(String content) 时,我得到一个错误,因为变量 "content" 没有被识别。
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.display_toast:
displayContent(String text);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
将 "String content" 作为第二个输入传递给 onOptionsItemSelected 也无法解决问题。我是 Android 编程新手,尽管花了很多时间在网上搜索解决方案,但我找不到答案。所以我将非常感谢任何帮助。
行 displayContent(String text)
基本上是创建一个新的变量文本,然后将其提供给方法,因此它是空的。您必须将该变量保存为 Activity 中的全局变量,然后您可以在 onOptionItemSelected 中访问它。所以它会是这样的:
public class MyActivity extends Activity {
private String content;
然后稍后在 onLoadFinished 中你不创建一个新变量你使用那个
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
if (cursor.moveToFirst())
{
int textColumnIndex = cursor.getColumnIndex(NoteEntry.COLUMN_TEXT);
content = cursor.getString(textColumnIndex);
mEditView.setText(content);
}
然后在 onOptionItemSelected 中使用内容作为方法的参数:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case R.id.display_toast:
displayContent(content);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
研究局部变量和全局变量之间的区别,这对您来说很有意义。