Приложение работает, но setImageBitMap () не генерирует QR-код - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь сделать приложение для Android.Это базовое приложение для генерации QR-кодов.Раньше приложение прекрасно работало, просто используя кнопку «Создать QR-код».Но я решил поместить генератор QR-изображения в ViewPager, который управляется TabLayout.

Мне удалось настроить 2 вкладки, и у каждой будет уникальный QR-код.

Вот содержимое каждого фрагмента вкладки:

 <TextView
        android:id="@+id/action_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="35dp"
        android:text="@string/action_text"
        android:textFontWeight="bold"
        android:textSize="15dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
        android:id="@+id/receive_QR"
        android:layout_width="250dp"
        android:layout_height="150dp"
        android:layout_marginTop="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/action_text"
        app:srcCompat="@drawable/logo"
        tools:srcCompat="@drawable/logo" />

ПРИМЕЧАНИЕ. ВИД ИЗОБРАЖЕНИЯ ВТОРОГО ФРАГМЕНТА ИМЕЕТ send_QR id

Вот фрагмент кода java-файла:

public class Tab1Fragment extends Fragment {

    private static final android.os.Environment Environment = null;
    String TAG = "GenerateQRCode";
    ImageView receiveQR;
    String savePath = Environment.getExternalStorageDirectory().getPath() + "/QRCode/";
    Bitmap bitmap;
    QRGEncoder receiveQrgEncoder;
    int smallerDimension;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_one, container, false);
        receiveQR = (ImageView) view.findViewById(R.id.receive_QR);

        smallerDimension = (100 * 3) / 5;

        receiveQrgEncoder = new QRGEncoder("QR LOGIC GOES HERE", null, QRGContents.Type.TEXT, smallerDimension);
        try{
            bitmap = receiveQrgEncoder.encodeAsBitmap();
            receiveQR.setImageBitmap(bitmap);
        }catch (WriterException e) {
            Log.v(TAG, e.toString());
        }

        return inflater.inflate(R.layout.fragment_one, container, false);

    }


}

Что мне не хватает?
Большое спасибо за ваше время и помощь в этом вопросе.

1 Ответ

0 голосов
/ 03 марта 2019

Это только потому, что вы снова возвращаете новый раздутый вид в последней строке вашего onCreateView().Таким образом, ваше связанное представление сбрасывается, поэтому receiveQR будет очищено.Следующий код неверен:

public class Tab1Fragment extends Fragment {

    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_one, container, false);
        receiveQR = (ImageView) view.findViewById(R.id.receive_QR);

        ...

        // you're returning a new inflated view here which is incorrect.
        return inflater.inflate(R.layout.fragment_one, container, false);

    }
}

Вам необходимо вернуть предыдущее завышенное представление, что-то вроде этого:

public class Tab1Fragment extends Fragment {

    ...

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_one, container, false);
        receiveQR = (ImageView) view.findViewById(R.id.receive_QR);

        ...

        return view;

    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...