我正在尝试向操作栏添加分享按钮。我正确创建了xml文件,这是代码:caesar cipher的一个实现,它接受一个int和一个字符串作为输入,并在另一个edittext中显示结果。我认为问题应该是因为结果edittext的频繁更新(追加)。当我按分享按钮时,它会成功重定向到指定的目的地,但主题和文本都是空的。 (尝试谷歌保持)。注意我在onCreateOptionsMenu方法中使用了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;
}
}
答案 0 :(得分:0)
问题是加载活动后立即创建菜单(以及共享意图) 。此时EditText仍为空。
你应该改为:
ShareActionProvider
的引用
onCreateOptionsMenu()
时,请创建新的意图并致电encrypt()
。这样,当共享操作执行时,共享Intent将是最新的。