RecyclerView.Adapterでは静的フィールドはありませんが、ViewHolderでonClickを実装する必要がありますが、onClickメソッドでエラーが発生しましたnon static field cannot be referenced from a static context
リサイクラビューはタブフラグメントで複数回作成され、値がオーバーライドされるため、フィールドを静的なものとして宣言することはできませんので、適切な解決策を教えてください。RecyclerView.Adapterでは、非静的フィールドはonclickメソッドでは参照できません
編集
は、ここに私のコード
public class RecyclerAdapter extends RecyclerView.Adapter{
public static final int VIEW_ITEM = 1;
public static final int VIEW_PROG = 0;
public ArrayList<BlogPosts> blogPostsArrayList;
public OnLoadMoreListener onLoadMoreListener;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView title, category, time;
public ImageView blogImage;
public static Context context;
public ViewHolder(View view) {
super(view);
context = view.getContext();
title = (TextView) view.findViewById(R.id.textView);
category = (TextView) view.findViewById(R.id.category);
time = (TextView) view.findViewById(R.id.textTime);
blogImage = (ImageView) view.findViewById(R.id.newsListImage);
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
try {
RecyclerAdapter blogsListRecyclerAdapter = new RecyclerAdapter();
BlogPosts details;
details = blogPostsArrayList.get(getPosition());// Problem is here
Intent i = new Intent(context, ActivityNewsDetail.class);
context.startActivity(i);
} catch (Exception e) {
}
}
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.progressBar1);
}
}
public RecyclerAdapter(ArrayList<BlogPosts> blogPostsArrayList) {
this.blogPostsArrayList = blogPostsArrayList;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v;
if (viewType == VIEW_ITEM) {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.news_row, parent, false);
return new DonorListViewHolder(v);
} else {
v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.progressbar_item, parent, false);
return new ProgressViewHolder(v);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof DonorListViewHolder) {
BlogPosts item = blogPostsArrayList.get(position);
Constants.showLogTag("" + item.getPostId());
((DonorListViewHolder) holder).title.setText(item.getPostHeading());
((DonorListViewHolder) holder).category.setText(item.getCatagoryId()+"");
((DonorListViewHolder) holder).time.setText(getTime(item.getDateReported()));
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
String baseUrl = settings.getString(Constants.BASE_URL, Constants.BASE_URL);
Picasso.with(context).load(baseUrl + item.getPhoto350())
.fit().centerCrop().into(((DonorListViewHolder) holder).blogImage);
} else {
((ProgressViewHolder) holder).progressBar.setIndeterminate(true);
}
}
@Override
public int getItemCount() {
return blogPostsArrayList != null ? blogPostsArrayList.size(): 0;
}
@Override
public int getItemViewType(int position) {
return blogPostsArrayList.get(position) != null ? VIEW_ITEM : VIEW_PROG;
}
public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
this.onLoadMoreListener = onLoadMoreListener;
}
}私はviewholderからのonClickリスナを移動するすべての
アダプターのコードを表示 –
@AntonKazakov編集済みの質問 –