簡體   English   中英

為什么我無法在 recyclerview 上單擊我的項目

[英]Why i can't click my item on recyclerview

我無法點擊recyclerview上的項目,我不知道為什么,所以有人可以幫我解決這個問題嗎?

所以這在我的 MainActivity 代碼中,我在 onCreate 中調用了這個 function:

private void showRecyclerList(){
    recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    UserAdapter userAdapter = new UserAdapter(this, userModel);
    recyclerView.setAdapter(userAdapter);

    userAdapter.setOnItemClickCallback(new UserAdapter.OnItemClickCallback() {
        @Override
        public void onItemClicked(UserModel data) {
        Intent intent = new Intent(MainActivity.this, UserDetailActivity.class);
        intent.putExtra(UserDetailActivity.EXTRA_DATA, (Parcelable) userModel);
        startActivity(intent);
        }
    });
}

我使用了來自 OnItemClickCallback 的接口,並在 User Adapter 上使用了它,這是我的 UserAdapter:

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ListViewHolder> {

private Context context;
private List<UserModel> userData = new ArrayList<>();

private OnItemClickCallback onItemClickCallback;

public void setOnItemClickCallback(final OnItemClickCallback onItemClickCallback) {
    this.onItemClickCallback = onItemClickCallback;
}

public static final String DATA_EXTRA = "data_extra";


public UserAdapter(Context context, List<UserModel> userData) {
    this.context = context;
    this.userData = userData;
}


@NonNull
@Override
public ListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_user, parent,false);
    return new ListViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ListViewHolder holder, int position) {
    //UserModel user = userData.get(position);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onItemClickCallback.onItemClicked(userData.get(holder.getAdapterPosition()));
        }
    });

    Glide.with(context)
            .load(userData.get(position).getAvatarUrl())
            .into(holder.imgPhoto);

    holder.tvName.setText(userData.get(position).getLogin());
}

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

public class ListViewHolder extends RecyclerView.ViewHolder
{
    ImageView imgPhoto;
    TextView tvName;
    public ListViewHolder(View itemView) {
        super(itemView);
        imgPhoto = itemView.findViewById(R.id.iv_avatar);
        tvName = itemView.findViewById(R.id.tv_name);

    }

}

public interface OnItemClickCallback {
    void onItemClicked(UserModel data);
}

這是我的錯誤信息:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.dicoding.githubuserwithapi.UserAdapter$OnItemClickCallback.onItemClicked(com.dicoding.githubuserwithapi.model.UserModel)' on a null object reference at com.dicoding.githubuserwithapi.UserAdapter$1 .onClick(UserAdapter.java:60) at android.view.View.performClick(View.java:7357) at android.view.View.performClickInternal(View.java:7334) at android.view.View.access$3600(View .java:808) at android.view.View$PerformClick.run(View.java:28200) at android.os.Handler. handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java :7478) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:941) I/Process:發送信號。 PID:9602 SIG:9

我在 UserAdapter 第 60 行有一個錯誤

holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            **onItemClickCallback.onItemClicked(userData.get(holder.getAdapterPosition()));**
        }
    });

在我的 UserModel class 上,只有來自用戶的數據,我在上面使用了 Parcelable。

我想我無法獲得 position,但我不知道在哪里可以修復它,所以你們可以幫我解決這個問題..

創建 LayoutInflater 時,您應該使用parent.context

View view = LayoutInflater.from(parent.context).inflate(R.layout.item_user, parent,false);

如果position已經作為onBindViewHolder() getAdapterPosition()

onItemClickCallback.onItemClicked(userData.get(position));

當您定義該單擊偵聽器時,您沒有使用傳遞給它的數據。

userAdapter.setOnItemClickCallback(new UserAdapter.OnItemClickCallback() {
        @Override
        public void onItemClicked(UserModel data) {
        Intent intent = new Intent(MainActivity.this, UserDetailActivity.class);
        intent.putExtra(UserDetailActivity.EXTRA_DATA, (Parcelable) **userModel**);
        startActivity(intent);
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM