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

时间:2014-07-06 20:09:50

标签: android android-actionbar

我正在尝试向操作栏添加分享按钮。我正确创建了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;
}

}

1 个答案:

答案 0 :(得分:0)

问题是加载活动后立即创建菜单(以及共享意图) 。此时EditText仍为空。

你应该改为:

  • 在[{1}}。
  • 中存储对ShareActionProvider的引用
  • 致电onCreateOptionsMenu()时,请创建新的意图并致电encrypt()

这样,当共享操作执行时,共享Intent将是最新的。