Java 如何在OnOptions ItemSelected中从onLoadFinished引用变量?

Java 如何在OnOptions ItemSelected中从onLoadFinished引用变量?,java,android,variables,methods,menuitem,Java,Android,Variables,Methods,Menuitem,在此onLoadFinished方法中,我获取特定数据库列的内容,并将其设置在EditView(mEditView)上,其id已在前面的OnCreate方法中定义: @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { if (cursor.moveToFirst()) { int textColumnIndex =

在此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);         
        }   
我想在点击Actionbar菜单按钮时显示这个土司。但是这里有一个问题-当我在onOptions ItemSelected中包含displayContent(字符串内容)时,我得到一个错误,因为变量“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);          
     }

将“字符串内容”作为第二个输入传递给OnOptions ItemSelected也不能解决问题。我是Android编程新手,尽管花了很多时间在网上搜索解决方案,我还是找不到答案。因此,我非常感谢您的帮助。

显示内容(字符串文本)
基本上是创建一个新的变量文本,然后将其提供给方法,因此它是空的。您必须将变量保存为活动中的全局变量,然后才能在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);         
        }  

研究局部变量和全局变量之间的差异,这对您很有意义。

谢谢您的回答。在发布这个问题之前,我已经试着按照您描述的方式创建了一个局部变量,但它不起作用-显示的toast是空的。但是当toast行包含在onLoadFinished方法中时,toast会在应用程序中弹出正确的文本。你不应该创建局部变量,它需要是全局变量。定义变量的位置很重要。如果你在一个方法中定义它,当你离开这个方法时,它就会消失。尝试在活动顶部的任何其他方法之外定义变量。抱歉,这是一个输入错误。我的意思是,我创建了一个全局变量,当然了,但是当你调用这个方法时,你是否仍然说
displayContent(stringtext)
?因为这会创建一个名为text的新变量,其中没有任何内容。它应该是
displayContent(content)
首先我尝试创建一个全局变量并使用displayContent(text)。由于它不起作用,我开始在网上搜索信息并尝试这种方法,因为我找不到相应的答案。在你发完帖子后,我又尝试了第一种方法(也是你建议的),但是没有用。
@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);         
        }  
@Override
public boolean onOptionsItemSelected(MenuItem item)
    {
    switch(item.getItemId())
       {
        case R.id.display_toast:
            displayContent(content);
            }
            return true;
        default:
            return super.onOptionsItemSelected(item);          
     }