как отправить данные из одного неактивного класса в другой android - PullRequest
1 голос
/ 10 марта 2020

В моем приложении android я использую Adapter внутри другого Adatper. Допустим, ребенок и родитель Adapter. В родительском Adapter я использовал onclick метод для элемента и создал экземпляр дочернего элемента Adapter. Теперь onClick в представлении child Adapter Я хочу отправить сигнал родителю Adapter и запустить функцию.
Это мой код:

// This is in parent layout

        holder.liker.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                holder.reaction_layout.setVisibility(View.VISIBLE);
                if(holder.cursor.getCount()>0)
                {
                    holder.show_reaction=true;
                    holder.tinyDB.putString("post_id",String.valueOf(holder.username.getTag()));
                    holder.tinyDB.putString("act_id",String.valueOf(holder.post_comment.getTag()));
                    while(holder.cursor.moveToNext())
                    {

                        holder.imageModelArrayList.add(new ReactionModel(holder.cursor.getString(1),holder.cursor.getString(3),holder.cursor.getString(2)));
                        holder.recyclerView.setAdapter(holder.adapter);  //Here i instantiate the child adapter
                    }
                }

                return true;
            }
        });

Теперь это функция щелчка ребенка Adapter:

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tinyDB.putString("image",imageModelArrayList.get(position).getImage_drawable());
                String react_id=String.valueOf(holder.title.getTag());
                String act_id=tinyDB.getString("act_id");
                String post_id=tinyDB.getString("post_id");
                NetworkController.postLikePojoClassCall(base64,Integer.parseInt(act_id),Integer.parseInt(react_id),Integer.parseInt(post_id)).enqueue(new retrofit2.Callback<PostLikePojoClass>() {
                    @Override
                    public void onResponse(Call<PostLikePojoClass> call, retrofit2.Response<PostLikePojoClass> response) {
                        if(response.isSuccessful()) {
                            System.out.println("response__  " + response.body().getSuccess());


                            }else{
                            System.out.println("response__  " + response.errorBody());
                            }
                        }


                    @Override
                    public void onFailure(Call<PostLikePojoClass> call, Throwable t) {
                        System.out.println("failure__  " + t.getMessage());

                    }
                });

            }
        });

В этом клике я хочу отправить сигнал родителю Adapter, что элемент был нажат.

1 Ответ

0 голосов
/ 10 марта 2020

Используйте метод обратного вызова для запуска вашего родительского адаптера

Создание интерфейса

public interface MyInterface{
    void click();
}

Создание родительского адаптера для реализации интерфейса

class YourParentAdapter extends RecyclerView.Adapter<YourViewHolder> implements MyInterface

Передайте свой родительский адаптер адаптер в дочерний адаптер через конструктор

public ChildAdapter(MyInterface myInterface){
    this.myInterface = interface;
}

Теперь вы можете использовать функцию из родительского адаптера внутри дочернего адаптера:

myInterface.click();
...