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();
}
}