I have Fragment with RecyclerView adapter. Also i have month array and icluded posts array object.
I try to add posts table rows dinamically. I dont know how it should made.
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.NewsCardViewHolder> {
private List<NewsMonth> months;
private List<NewsPost> posts;
private AdapterView.OnItemClickListener onItemClickListener;
private String TAG = "NewsAdapter";
private Context _context;
TableLayout tableLayout;
public NewsAdapter(List<NewsMonth> months, Context context) {
this.months = months;
this._context = context;
}
class NewsCardViewHolder extends RecyclerView.ViewHolder {
CardView cv;
TextView monthName;
TextView postLabel;
TextView postType;
TableLayout tableLayout;
NewsCardViewHolder(View itemView) {
super(itemView);
cv = itemView.findViewById(R.id.cv);
monthName = itemView.findViewById(R.id.month_name);
postLabel = itemView.findViewById(R.id.news_label);
postType = itemView.findViewById(R.id.news_category);
tableLayout = itemView.findViewById(R.id.tableNews);
}
}
@NonNull
@Override
public NewsCardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.news_item, viewGroup, false);
return new NewsCardViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull NewsCardViewHolder ViewHolder, final int position) {
ViewHolder.monthName.setText(months.get(position).getMonthName());
posts = months.get(position).getPosts();
for (int j = 0; j < posts.size(); j++) {
//ViewHolder.itemView.addView(months.get(position).getPosts().get(j).getTitle());
TextView postLabel = new TextView(_context.getApplicationContext());
postLabel.setGravity(Gravity.START);
postLabel.setText(months.get(position).getPosts().get(j).getTitle());
postLabel.setLayoutParams(new TableRow.LayoutParams
(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
postLabel.setTextSize(10);
postLabel.setTextColor(Color.parseColor("#FF9900"));
TableRow row = new TableRow(_context.getApplicationContext());
row.addView(postLabel);
tableLayout.addView(row);
}
}
On activity start i get: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference on this line: TextView postLabel = new TextView...
EDIT:
public class NewsFragment extends Fragment{
private List<NewsMonth> monthArray;
private List<NewsPost> postArray;
private TableLayout tableLayout;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.news_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view,
Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewPager viewPager = view.findViewById(R.id.view_pager);
tableLayout = view.findViewById(R.id.tableNews);
ImageSliderAdapter sliderAdapter = new ImageSliderAdapter(getContext());
viewPager.setAdapter(sliderAdapter);
initializeData();
RecyclerView recyclerView = view.findViewById(R.id.newsList);
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); //getActivity(), LinearLayoutManager.VERTICAL, false
NewsAdapter adapter = new NewsAdapter(monthArray, getContext());
recyclerView.setAdapter(adapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
}