Обратный вызов с двумя методами не работает между классом NonActivity и фрагментом - PullRequest
0 голосов
/ 22 сентября 2019

Я создал обратный вызов через интерфейс с двумя методами.Обратный вызов находится между классом NonActivity и фрагментом.Проблема в том, что вызывается только один невидимый интерфейсный метод.И другой видимый интерфейсный метод не вызывается.Я скопировал код интерфейса и оба класса. МОЯ ЦЕЛЬ - ТО, ЧТО ОБА СПОСОБЫ ВЫЗОВА НЕВИДИМЫ () И ВИДИМЫ () ДОЛЖНЫ БЫТЬ ВЫЗВАНЫ В РАЗНЫЕ ВРЕМЕНИ, КОГДА ТРИГГЕРНЫЕ .Я несколько озадачен тем, что не могу получить определенную функциональность.

public interface MyCustomListener {
    void invisible();
    void visible();
}

Код класса NonActivity выглядит следующим образом:

public class Operations {    
    private Context context;
    private RecyclerView recyclerView;
    private RecyclerView.Adapter adapter;

    private MyCustomListener listener;

    public void setMyCustomListener(MyCustomListener listener) {
        this.listener = listener;
    }

    public Operations(Context context, RecyclerView recyclerView) {
        this.context = context;
        this.recyclerView = recyclerView;
    }

    public void getView(int number) {

        Perform pa = new Perform(context);
        Long count = pa.count(number);

        if (count > 0) {
            ArrayList arrayList = pa.getAllList(number);
            adapter = new AdapterMovie(context, arrayList, recyclerView, number);
            recyclerView.setAdapter(adapter);

            if (listener != null)
                listener.invisible();
        } 
        else if (count < 1) {
            recyclerView.setAdapter(null);

            if (listener != null)
                listener.visible();
        }
    }
}

Код класса Fragment выглядит следующим образом:

public class Frag extends Fragment {
    private int fragmentNumber = 0;

    private Operations fo;
    private RecyclerView recyclerView;
    private TextView message;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag, container, false);
        fo = new Operations(getActivity(), recyclerView);
        return view;
    }

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


        fo.setMyCustomListener(new MyCustomListener() {
            @Override
            public void invisible() {
                Toast.makeText(getActivity(), "invisible", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void visible() {
                Toast.makeText(getActivity(), "visible", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

1 Ответ

0 голосов
/ 22 сентября 2019

Если вы хотите получить обратный вызов во фрагменте, вы должны реализовать свой фрагмент из MyCustomListener.затем вы передаете фрагмент в конструктор Operations.

фрагмент, такой как ниже:

     public class Frag extends Fragment implements MysCustomListener{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag, container, false);
        fo = new Operations(this, recyclerView);
        return view;
    }
    @override
    void invisible(){
    }
    @override
    void visible(){
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...