Nano Hash - криптовалюты, майнинг, программирование

Как добавить несколько действий в одно onCreateOptionsMenu (меню меню)

Я хочу добавить несколько действий под одним `onCreateOptionsMenu (меню меню) в моем приложении для Android, я уже добавил два действия, и они работают нормально, но третье действие не работает, ниже приведен мой код

onCreateOptionsMenu(Menu menu)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, 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;
    }
    if(item.getItemId() == R.id.share_this_app)
        mShareActionProvider.setShareIntent(getDefaultShareIntent());
    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!"));
    shareIntent.setPackage("com.whatsapp");
}


/** Returns a share intent */
private Intent getDefaultShareIntent(){
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_SUBJECT, "download the app");
    intent.putExtra(Intent.EXTRA_TEXT," play.google.com ");
    return intent;
}

menu_main.xml

<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">

<item
    android:title="@string/share"
    android:id="@+id/menu_item_share"
    android:showAsAction="always"
    android:icon="@drawable/share"
    />

<item
    android:id="@id/menu_item_refresh"
    android:title="Refresh"
    android:showAsAction="never"
    android:icon="@drawable/refresh"
    />

<item
    android:id="@+id/share_this_app"
    android:title="Share this app"
    android:showAsAction="never"
    android:actionProviderClass="android.widget.ShareActionProvider"/>

From above, menu_item_share and menu_item_refresh is working, but Share this app isn't working.



Ответы:


1

Возможно, вам не хватает оператора return true под этой строкой mShareActionProvider.setShareIntent(getDefaultShareIntent());. Вы можете просто следовать четкой структуре, чтобы выполнить свою задачу.

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_item_share: {
        shareURL();
        break; //or, return true;
    }
    case R.id.menu_item_refresh: {
        mWebView.reload();
        break; //or, return true;
    }
    case R.id.share_this_app: {
        mShareActionProvider.setShareIntent(getDefaultShareIntent());
        break; //or, return true;
    }
    return super.onOptionsItemSelected(item);
}
04.07.2016
  • не работает, теперь приложение принудительно закрывается после нажатия кнопки «Поделиться этим приложением». Я добавил оба рассматриваемых намерения общего доступа, если вы можете взглянуть на это и сообщить мне, если с ними что-то не так. 04.07.2016
  • вы уже использовали то, что вам нужно, в методе shareURL(). (1) создайте метод наподобие «shareURL()». (2) следуйте: developer.android.com/training/sharing/send.html, чтобы поделиться своим app_playstore_url через другие приложения. (3) вызовите новый метод, когда вы нажмете R.id.share_this_app 04.07.2016
  • вы можете принять / проголосовать за ответ, если он был полезен. Ваше маленькое вдохновение побуждает нас проводить здесь больше времени :) 04.07.2016

  • 2

    Эй, я думаю, это поможет... Вы написали android:showAsAction="never".
    Таким образом, это вызовет ошибку при размещении значка внутри значка меню (три точки на панели инструментов). . Поэтому установите для этого атрибута значение "всегда" или "ifRoom". Надеюсь, это сработает :-)

    04.07.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..