startActivity (намерение) ничего не делает - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь начать действие с оператором switch следующим образом:

public class MainActivity extends AppCompatActivity {

    public static String key = "1010";
    private Bitmap bitmap = null;

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

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add:
                //working
                break;
            case R.id.rotate_right:
                //working
                break;
            case R.id.fullscreen: //not working
                Intent intent = new Intent(getBaseContext(), fullScreenActivity.class);
                intent.putExtra(key, bitmap);
                startActivity(intent);
                break;
        }
    }
}

И это код следующей операции

public class fullScreenActivity extends AppCompatActivity {

    Bitmap bitmap = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_full_screen);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        Intent starter = getIntent();
        bitmap = starter.getParcelableExtra(MainActivity.key);
    }
}

Я также добавил второе действие вманифест:

<activity android:name=".fullScreenActivity"
        android:screenOrientation="landscape"></activity>

Вот R.menu.items:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

<item
    android:id="@+id/add"
    android:icon="@drawable/ic_add_black_24dp"
    android:title="@string/add_item"
    app:showAsAction="ifRoom"
    />

<item
    android:id="@+id/rotate_right"
    android:icon="@drawable/ic_rotate_right_black_24dp"
    android:title="@string/rotate_item"
    app:showAsAction="ifRoom"
    />

<item
    android:id="@+id/fullscreen"
    android:icon="@drawable/ic_fullscreen_black_24dp"
    android:title="@string/fullscreen_item"
    app:showAsAction="ifRoom"
    />

</menu>

Это ничего не делает, так в чем может быть проблема?

Обратите внимание, что только полноэкранный элементне работает, поэтому я думаю, что проблема в коде startActivity.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

если вы используете пользовательскую панель инструментов для раздувания меню, тогда, пожалуйста, установите панель инструментов: -

setSupportActionBar(toolbar);

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

0 голосов
/ 28 января 2019

Мне кажется, проблема в этой строке

intent.putExtra(key, bitmap);

Android ограничивает размер данных в намерениях.Есть 2 случая

  • Приложение вылетит с RuntimeException, вы можете легко увидеть это исключение в logcat, как показано на скриншоте ниже

enter image description here

  • Приложение не аварийно завершит работу, но ничего не отобразит и вернется на домашний экран (ваш случай).На самом деле есть предупреждение об этой проблеме, чтобы увидеть предупреждение, вы должны изменить тип logcat на Warn и фильтр logcat на No Filters , как показано на скриншоте ниже.

android.os.TransactionTooLargeException

Как вы можете видеть, как предупреждение, 812104 в моем случае, оно может быть другим в вашем случае.

android.os.TransactionTooLargeException: data parcel size 812104 bytes

Решения: Если вам нужно передать растровое изображение из действия в другое

  • Если растровое изображение - это URL (путь к файлу, ссылки http / https и т. Д.) Или идентификатор ресурса (R.drawable.splash_screen и т. д.), а затем просто передайте URL или идентификатор ресурса другому действию.
  • Если растровое изображение является результатом действия пользователя (например, получено с камеры), вы можете сохранить растровое изображение в локальномзатем передайте путь к файлу для другого действия.

Надеюсь, это поможет!

...