Recycler Adapter callback nullpointer - PullRequest
       2

Recycler Adapter callback nullpointer

0 голосов
/ 27 января 2020

У меня есть такой адаптер для утилизации

public class ShopUsersAdapter extends RecyclerView.Adapter<ShopUsersAdapter.MyViewHolder> implements View.OnClickListener  {

private List<ShopUsersRecyclerModel> user_list;
private Context context;
private AdminCheckLocActivity activity;
private AdapterCallback mAdapterCallback;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView user;
    public TextView type;
    private ImageButton btn_loc;
    public MyViewHolder(View view) {
        super(view);
        user = (TextView) view.findViewById(R.id.txt_text);
        type =(TextView)view.findViewById(R.id.txt_count);
        btn_loc=(ImageButton)view.findViewById(R.id.btn_loc);
    }
}

@Override
public ShopUsersAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.map_pop_up_item, parent, false);

    context=parent.getContext();
    itemView.setOnClickListener(this);

    return new ShopUsersAdapter.MyViewHolder(itemView);
}
@Override
public void onClick(View v) {

}

public ShopUsersAdapter(List<ShopUsersRecyclerModel> user_list, AdminCheckLocActivity activity) {
    this.user_list = user_list;
    this.activity=activity;
    this.mAdapterCallback = ((AdapterCallback) context);
}



@Override
public void onBindViewHolder(final ShopUsersAdapter.MyViewHolder holder, int position) {
    final ShopUsersRecyclerModel user = user_list.get(position);

    holder.user.setText(user.getUser_info());

    if (user.getUser_type()==3){holder.type.setText("TV Pro.");}
    if (user.getUser_type()==4){holder.type.setText("B. Esya Pro.");}

    holder.btn_loc.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mAdapterCallback.onMethodCallback(user.getUser_info());
        }
    });


}


@Override
public int getItemCount() {
    return user_list.size();
}


public interface AdapterCallback {
    void onMethodCallback(String userName);
 }
}

, но я получаю ошибку

NullPointer at

mAdapterCallback.onMethodCallback(user.getUser_info());

мой код активности;

 @Override
public void onMethodCallback(final String userName) {
    Toast.makeText(this,userName,Toast.LENGTH_LONG).show();
}

и я реализую это как;

implements ShopUsersAdapter.AdapterCallback

userInfo данные не равны нулю, я проверяю это. но мне нужен этот обратный звонок, все мои переработчики, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 27 января 2020

Я предлагаю изменить конструктор вашего адаптера для прямого получения обратного вызова:

public ShopUsersAdapter(List<ShopUsersRecyclerModel> user_list, AdminCheckLocActivity activity, AdapterCallback callback) {
    this.user_list = user_list;
    this.activity=activity;
    this.mAdapterCallback = callback;
}

Вы также можете убедиться, что ваш обратный вызов не равен нулю, когда вы его используете:

holder.btn_loc.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // This should be optional for your case
        // but it can be useful if you're ever in a situation
        // where the callback isn't always available
        if(mAdapterCallback != null){
            mAdapterCallback.onMethodCallback(user.getUser_info());
        }
    }
});

И в рамках своей Деятельности обязательно передайте обратный вызов в качестве аргумента при создании экземпляра Адаптера:

// Use 'this' since your Activity implements the callback
ShopUsersAdapter adapter = new ShopUsersAdapter(myList, myActivity, this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...