• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ZXingScannerView w innej klasie niż bazowa

Object Storage Arubacloud
0 głosów
114 wizyt
pytanie zadane 13 listopada 2019 w Android, Swift, Symbian przez Moras Obywatel (1,620 p.)

Cześć chciałem sobie zaimplementować do swojej aplikacji skaner kodów QR. Postanowiłem skorzystać z interfejsu ZXingScannerView. Jest pełno tutoriali dotyczących tej biblioteki, lecz ciężko mi znaleźć taki w którym jest pokazanie użycie tego interfejsu w klasie innej niż bazowej. Napisałem taki kod, ale nie działa, coś robię źle. Być może problem leży w tym, że podaje złe Contexty. Bardzo proszę o pomoc.

W tej klasie dzieje się kilka innych rzeczy, ale chodzi mi o fragment w którym używam 'scan_buttona'

package com.example.elistazakupow3;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import Models.ShoppingList;

public class FragmentShoppingList extends Fragment {

    protected View view;
    private RecyclerView myRecyclerView;
    private ArrayList<ShoppingList> lstShoppingList;
    Button scan_button;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        view = inflater.inflate(R.layout.fragment_shopping_list, container,false);
        myRecyclerView = view.findViewById(R.id.myRC);
        myRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        MyRecyclerViewAdapter recyclerViewAdapter = new MyRecyclerViewAdapter(lstShoppingList);
        myRecyclerView.setAdapter(recyclerViewAdapter);

        //Scanner
        scan_button = view.findViewById(R.id.scan_button);
        scan_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new CodeScanner();
            }
        });

        return view;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState){
        super.onCreate(savedInstanceState);


        lstShoppingList = new ArrayList<>();
        lstShoppingList.add(new ShoppingList("Na wigilię","Nie wiem","23.04.1998"));

    }

}

Klasa CodeScanner. Proszę zwrócić uwagę, że dziedziczy po klasie którą podałem wyżej.

package com.example.elistazakupow3;

import android.app.AlertDialog;
import com.google.zxing.Result;

import me.dm7.barcodescanner.zxing.ZXingScannerView;

public class CodeScanner  extends FragmentShoppingList implements ZXingScannerView.ResultHandler {

    private ZXingScannerView mScannerView;

    public CodeScanner(){
        mScannerView = new ZXingScannerView(getContext());
        getActivity().setContentView(mScannerView);
        mScannerView.setResultHandler(this);
        mScannerView.startCamera();
    }
 
    @Override
    public void onPause(){
        super.onPause();
        mScannerView.stopCamera();
    }
    @Override
    public void handleResult(Result result) {
       // Toast.makeText(getContext(), "Contents = " + result.getText() + ", Format = " + result.getBarcodeFormat().toString(), Toast.LENGTH_SHORT).show();


        AlertDialog.Builder bd = new AlertDialog.Builder(getContext());
        bd.setTitle("Wynik skanowania");
        bd.setMessage(result.getText());
        AlertDialog pokazKod = bd.create();
        pokazKod.show();
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 13 listopada 2019 przez KubenQPL Maniak (62,820 p.)
Problemem jest że ustawiasz zxingscannerview jako contentView, czyli główny widok twojego activity. Wsadź ten ZxingScannerView do xml'a i tam poustawiaj widoki jak chcesz
komentarz 13 listopada 2019 przez Moras Obywatel (1,620 p.)
Jestem w tym dość zielony. Stworzyłem osobny xml tylko z ZxingScannerView i on ma się pokazywać po naciśnięciu przycisku, ale nie wiem jak to ruszyć i połączyć ze sobą
komentarz 13 listopada 2019 przez KubenQPL Maniak (62,820 p.)
najlepiej jakbyś poznał podstawy skoro jesteś zielony.

Ale po krótce:

- Dodaj widok ZxingScannerView do pliku xml z twoim layoutem i nadaj mu id np scannerView
- w activity użyj ZxingScannerView scanner = findViewById(R.id.scannerView) żeby dostać instancję widoku
- potem co chcesz to możesz wywoływać na `scanner`
komentarz 13 listopada 2019 przez Moras Obywatel (1,620 p.)
Te dwa pierwsze punkty rozumiem, że tak trzeba zrobić, ale właśnie problem z tym jak mam połączyć ten xml z klasą CodeScanner
komentarz 13 listopada 2019 przez KubenQPL Maniak (62,820 p.)
no własnie poprzez scanner który pobrałeś przez findViewById
komentarz 13 listopada 2019 przez Moras Obywatel (1,620 p.)

Niestety nie wciąż nie działa:

    public CodeScanner(){

        mScannerView = getActivity().findViewById(R.id.scaner);
        mScannerView.setResultHandler(this);
        mScannerView.startCamera();

    }

 

komentarz 14 listopada 2019 przez KubenQPL Maniak (62,820 p.)
Bo wykonujesz akcje na widoku kiedy jeszcze nie jest on stworzony. Spróbuj to zrobić dopiero w onViewCreated. Polecam nauczyć się podstaw programowania na androida bo bez tego będzie ci ciężko.

Podobne pytania

0 głosów
1 odpowiedź 338 wizyt
pytanie zadane 10 stycznia 2022 w Android, Swift, Symbian przez Metarinda Użytkownik (740 p.)
0 głosów
0 odpowiedzi 181 wizyt
pytanie zadane 25 października 2019 w Android, Swift, Symbian przez XezolPL Obywatel (1,530 p.)
0 głosów
1 odpowiedź 132 wizyt
pytanie zadane 22 maja 2018 w Android, Swift, Symbian przez marcinconn Obywatel (1,560 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...