【发布时间】:2017-10-09 15:31:56
【问题描述】:
您好,我正在尝试为我的 RecyclerView 设置一个 onclicklistener,但是当我点击 RecyclerView 中的名称并显示错误代码时它崩溃了:
java.lang.NullPointerException:尝试调用接口方法 '空白 com.motivecodex.githubusers.adapter.RepositoryAdapter$OnItemClickListener.onItemClick(com.motivecodex.githubusers.database.table.Repository)' 在空对象引用上 在 com.motivecodex.githubusers.adapter.RepositoryAdapter$ViewHolder$1.onClick(RepositoryAdapter.java:52)
RepositoryAdapter.java
public class RepositoryAdapter extends RecyclerView.Adapter<RepositoryAdapter.ViewHolder> {
private static final String LOG_TAG = "RepositoryAdapter";
public interface OnItemClickListener {
void onItemClick(Repository repository);
}
private List<Repository> repositories;
private final OnItemClickListener listener;
public RepositoryAdapter(List<Repository> repositories, OnItemClickListener listener) {
this.repositories = repositories;
this.listener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.listitem_repository, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(repositories.get(position), listener);
// Repository githubRepository = repositories.get(position);
// holder.name.setText(githubRepository.getName());
// holder.stars.setText(String.valueOf(githubRepository.getStargazersCount()));
// holder.forks.setText(String.valueOf(githubRepository.getForksCount()));
}
@Override
public int getItemCount() {
if (repositories != null) {
return repositories.size();
}
return 0;
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView name, stars, forks;
public ViewHolder(View view) {
super(view);
name = (TextView) view.findViewById(R.id.listitem_name);
stars = (TextView) view.findViewById(R.id.listitem_stars);
forks = (TextView) view.findViewById(R.id.listitem_forks);
}
public void bind(final Repository repository, final OnItemClickListener listener) {
name.setText(repository.getName());
stars.setText(String.valueOf(repository.getStargazersCount()));
forks.setText(String.valueOf(repository.getForksCount()));
name.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
listener.onItemClick(repository);
Log.e(LOG_TAG, "Item clicked");
}
});
}
}
}
MainActivity.java
mGithubRecyclerView = (RecyclerView) findViewById(R.id.github_repository_recyclerview);
RecyclerView.LayoutManager mGithubLayoutManager = new LinearLayoutManager(getApplicationContext());
mGithubRecyclerView.setLayoutManager(mGithubLayoutManager);
mGithubRecyclerView.setHasFixedSize(true);
....
public void loadRepository(String username) {
mGithubApi.listRepository(username).enqueue(new Callback<List<Repository>>() {
@Override
public void onResponse(Call<List<Repository>> call, Response<List<Repository>> response) {
mGithubAdapter = new RepositoryAdapter(response.body(), MainActivity.java);
mGithubRecyclerView.setAdapter(mGithubAdapter);
}
@Override
public void onFailure(Call<List<Repository>> call, Throwable t) {
Log.e("MainActivity", "error loading from API");
}
});
}
@Override
public void onItemClick(Repository repository) {
Log.e(LOG_TAG, "Item clicked");
}
【问题讨论】:
标签: java android android-recyclerview onclicklistener