Вызов метода во фрагменте через LocalBroadcastManager - PullRequest
0 голосов
/ 11 февраля 2019

Я создаю приложение с 2 фрагментами.

  • 1-й фрагмент: ImageView и 2 TextViews
  • 2-й фрагмент: 2 EditTexts и 3 кнопки

Во втором фрагменте у меня есть кнопка «Сохранить».В onClick этой кнопки я пытаюсь отправить локальную трансляцию:

btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                localBroadcastManager.sendBroadcast(localIntent);
            }
        });

И это мое намерение:

 final LocalBroadcastManager localBroadcastManager = LocalBroadcastManager
                .getInstance(Objects.requireNonNull(getContext()));

        final Intent localIntent = new Intent("CUSTOM_ACTION");

Точкаэто так, что 1-й фрагмент выбирает его и выполняет метод для сохранения изображения в виде растрового изображения с его заголовками (для этого предназначены 2 TextView).Это моя попытка:

private BroadcastReceiver listener = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent ) {
            String data = intent.getStringExtra("DATA");
            Toast.makeText(context, data + " received", Toast.LENGTH_SHORT).show();

            createAndSaveBitmap(topTextView.getText().toString(), bottomTextView.getText().toString(), memeBitmap, memeCanvas, memePaint, imageView, imageUri);
        }
    };

    public void createAndSaveBitmap(String top, String bottom, Bitmap bitmap,
                                    Canvas canvas, Paint paint, ImageView imageView, Uri imageUri) {

        try {
            memeBitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageUri))
                    .copy(Bitmap.Config.ARGB_8888, true); }

        catch (FileNotFoundException e) { e.printStackTrace(); }

        canvas = new Canvas(memeBitmap);

        paint = new Paint();

        canvas.drawText(top, 0, 0, paint);
        canvas.drawText(bottom, 0, memeCanvas.getHeight() - 10, paint);

        imageView.setImageBitmap(memeBitmap);

        if(bitmap != null){
            File file = Environment.getExternalStorageDirectory();
            File newFile = new File(file, "test.jpg");

            try {
                FileOutputStream fileOutputStream = new FileOutputStream(newFile);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
                fileOutputStream.flush();
                fileOutputStream.close();
            }

            catch (FileNotFoundException e) {e.printStackTrace();}
            catch (IOException e) { e.printStackTrace(); }
        }
    }

Когда я запускаю приложение, ничего не происходит, когда я нажимаю кнопку «Сохранить».Не загружает изображение и не вылетает.Так как нет трассировки стека ошибок, я не вижу, в чем дело.

1 Ответ

0 голосов
/ 11 февраля 2019

Убедитесь, что вы вызываете это в onResume.

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
        listener, 
        new IntentFilter("CUSTOM_ACTION")
);

полученного фрагмента, а в onPause

LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(listener);
...