shareActionProvider的主题和文本字段留空-android

shareActionProvider的主题和文本字段留空-android,android,android-actionbar,Android,Android Actionbar,我正在尝试向actionbar添加一个共享按钮。我正确地创建了xml文件,下面是代码:caesar cipher的一个实现,它接受一个int和一个字符串作为输入,并在另一个edittext中显示结果。我认为问题应该是因为频繁的更新结果文本的附加。当我按下共享按钮时,它会成功重定向到指定的目的地,但主题和文本都是空的。尝试与谷歌保持。注意,我在onCreateOptions菜单方法中使用了shareSubject和shareText字符串 public class EncrActivity ext

我正在尝试向actionbar添加一个共享按钮。我正确地创建了xml文件,下面是代码:caesar cipher的一个实现,它接受一个int和一个字符串作为输入,并在另一个edittext中显示结果。我认为问题应该是因为频繁的更新结果文本的附加。当我按下共享按钮时,它会成功重定向到指定的目的地,但主题和文本都是空的。尝试与谷歌保持。注意,我在onCreateOptions菜单方法中使用了shareSubject和shareText字符串

public class EncrActivity extends Activity {

Button ok, next;
EditText etKey, text, res;
String input, result = "";
int key;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.encr_activity);

    ok = (Button) findViewById(R.id.bOk);
    next = (Button) findViewById(R.id.bNext);
    etKey = (EditText) findViewById(R.id.etKey);
    text = (EditText) findViewById(R.id.etText);
    res = (EditText) findViewById(R.id.etResult);

    ok.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               

            if (etKey.getText().length() == 0) {
                Toast.makeText(getApplicationContext(),
                        "please enter a valid value for a",
                        Toast.LENGTH_LONG).show();
            } else {
                key = Integer.parseInt(etKey.getText().toString());
            }

            encrypt(key);
        }
    });
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {               

            if (etKey.getText().length() == 0) {
                key = 0;
            } else {
                key = Integer.parseInt(etKey.getText().toString());
            }

            key++;              
            etKey.setText(""+key);
            encrypt(key);
        }
    });
}

public boolean isAlpha(int x) {
    if ((x >= 65 && x <= 90) || (x >= 97 && x <= 122)) {
        return true;
    } else {
        return false;
    }
}

public void encrypt(int shift){
    res.setText("");

    if (text.getText().length() == 0) {
        Toast.makeText(getApplicationContext(),
                "please don't leave the input empty",
                Toast.LENGTH_LONG).show();
    } else {
        input = text.getText().toString();
    }

    int length = input.length();
    for (int i = 0; i < length; i++) {
        int y = input.charAt(i);
        if (isAlpha(y)) {
            if (Character.isUpperCase(y)) {
                int character = (((y - 65) + shift) % 26) + 65;
                char charac = (char) character;
                res.append(charac + "");
            } else if (Character.isLowerCase(y)) {
                int character = (((y - 97) + shift) % 26) + 97;
                char charac = (char) character;
                res.append(charac + "");
            }
        } else {
            res.append(input.charAt(i) + "");
        }
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {     
    String shareSubject = EncrActivity.this.etKey.getText().toString();
    String shareText = EncrActivity.this.res.getText().toString();
    getMenuInflater().inflate(R.menu.action_bar_share_menu, menu);
    MenuItem item = menu.findItem(R.id.menu_item_share);
    ShareActionProvider myShareActionProvider = (ShareActionProvider) item.getActionProvider();
    Intent myIntent = new Intent();
    myIntent.setAction(Intent.ACTION_SEND);
    myIntent.setType("text/plain");
    myIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, shareSubject);
    myIntent.putExtra(Intent.EXTRA_TEXT, shareText);        
    myShareActionProvider.setShareIntent(myIntent);
    return true;
}

}

问题在于,一旦加载活动,就会创建菜单和共享意图。此时EditText仍然为空

你应该:

在OnCreateOptions菜单中存储对ShareActionProvider的引用。 调用encrypt时,创建一个新的Intent并调用setShareIntent。
这样,在执行共享操作时,共享意图将是最新的。

谢谢您的回答,顺便问一下,在stackoverflow或internet上的其他任何地方是否有类似的例子,因为我有点困惑newbie@user3810325看,它基本上是相同的模式:保留引用,然后稍后填充意图。