如何在 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);          
     }

研究局部变量和全局变量之间的区别,这对您来说很有意义。