Установить намерение обмена с помощью значка на панели действий

Я хочу поделиться сайтом, который пользователь просматривает в веб-просмотре в моем приложении, однако ни один из руководств, которым я следовал, просто не работает. Я могу получить значок для загрузки в панели действий, но он не щелкает. У меня были реализованы onclick слушатели и пока ничего. Приложение предназначено только для ICS или выше, поэтому оно не должно быть обратно совместимым со старыми андроидами. Код, который я выкладываю, написан до того, как иконка общего ресурса будет реализована, так как я хочу сделать это с нуля или посмотреть, есть ли у кого-нибудь идеи, что я могу сделать

   public class WebActivity extends Activity {

    private WebView mWebView = null;
    private EditText mInputUrl = null;

    /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
super.onCreate(savedInstanceState);
getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);
setContentView(R.layout.activity_web_view);

Intent intent = getIntent();
String thesite = intent.getStringExtra(MainPage.EXTRA_MESSAGE);

mInputUrl = (EditText)findViewById(R.id.input_url);
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
          String baseurl = "http://";
          String url = baseurl + mInputUrl.getText().toString();
          mWebView.loadUrl(url);
        }
    });

mWebView = (WebView) findViewById(R.id.webview);
mWebView.loadUrl(thesite);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient());
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setGeolocationEnabled(true);
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

final Activity MyActivity = this;
mWebView.setWebChromeClient(new WebChromeClient() {
    public void onGeolocationPermissionsShowPrompt(String origin, android.webkit.GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
     }
 public void onProgressChanged(WebView view, int progress)   
 {
  //Make the bar disappear after URL is loaded, and changes string to Loading...
  MyActivity.setTitle("Loading...");
  MyActivity.setProgress(progress * 100); //Make the bar disappear after URL is loaded

  // Return the app name after finish loading
     if(progress == 100)
        MyActivity.setTitle(R.string.app_name);
 }
 });
}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
 // Check if the key event was the Back button and if there's history
WebView myWebView = (WebView) findViewById(R.id.webview);
 if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
 myWebView.goBack();
 return true;
 }
 // If it wasn't the Back key or there's no web page history, bubble up to the default
 // system behavior (probably exit the activity)
 return super.onKeyDown(keyCode, event);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
    // This ID represents the Home or Up button. In the case of this
    // activity, the Up button is shown. Use NavUtils to allow users
    // to navigate up one level in the application structure. For
    // more details, see the Navigation pattern on Android Design:
    //
    // http://developer.android.com/design/patterns/navigation.html#up-vs-back
    //
    NavUtils.navigateUpFromSameTask(this);
    return true;
}
return super.onOptionsItemSelected(item);
}
}

редактировать

Я использовал этот код, чтобы попытаться заставить его работать, однако когда я нажимаю на значок, он ничего не делает.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.share_menu, menu);
return true;
}

@Override
public final boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case R.id.menu_item_share:
        shareURL();
}
return super.onOptionsItemSelected(item);
}

private void shareURL() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, mWebView.getUrl());
startActivity(Intent.createChooser(shareIntent, "Share This!"));
}

2 ответа

Решение

Я нашел ответ. Это было довольно просто в конце.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.share_menu, menu);
return true;
}

@Override
public final boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
    case R.id.menu_item_share:
        shareURL();
}
if(item.getItemId() == R.id.menu_item_refresh){
    mWebView.reload();
    return true;
}
return super.onOptionsItemSelected(item);
}

private void shareURL() {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, mWebView.getUrl());
startActivity(Intent.createChooser(shareIntent, "Share This Website!"));
}


}

Это также позволило мне иметь кнопку обновления тоже.

Я не вижу переопределения для onCreateOptionsMenu(..), вы уверены, что добавили свои ActionItems? Взгляните на http://developer.android.com/guide/topics/ui/actionbar.html.

Али.

Другие вопросы по тегам