RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(NoticeMngActivity.this));
RecyclerView.Adapter mAdapter = new noticeListAdapter(NoticeMngActivity.this, noticeList);
recyclerView.setAdapter(mAdapter);
I did this code in the main activity and there was error java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference This error pointed to
public int getItemCount() {
return noticeset.size();
}
But I checked noticeList size is 4 by log.d()...before passing to Adapter. why doesn't it work.... And there was more error above this error E/RecyclerView: No adapter attached; skipping layout I'm stuck with this problem a day....
This Adapter.java
public class noticeListAdapter extends RecyclerView.Adapter<noticeListAdapter.NoticeViewHolder> {
private Activity activity;
private ArrayList<notice> noticeset = null;
public static class NoticeViewHolder extends RecyclerView.ViewHolder{
public CardView cardView;
public NoticeViewHolder(CardView v){
super(v);
cardView = v;
}
}
public noticeListAdapter(Activity activity, ArrayList<notice> noticeset){
this.activity = activity;
noticeset = noticeset;
}
@NonNull
@Override
public NoticeViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
CardView cardView = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.item_notice, parent, false);
final NoticeViewHolder noticeViewHolder = new NoticeViewHolder(cardView);
cardView.setOnClickListener(view -> {
Intent resultIntent = new Intent();
resultIntent.putExtra("ProfilePath", (CharSequence) noticeset.get(noticeViewHolder.getAdapterPosition()));
activity.setResult(Activity.RESULT_OK, resultIntent);
activity.finish();
});
return noticeViewHolder;
}
@Override
public void onBindViewHolder(@NonNull NoticeViewHolder holder, int position) {
CardView cardView = holder.cardView;
TextView titletextView = cardView.findViewById(R.id.titletextView);
TextView datetextView = cardView.findViewById(R.id.datetextView);
titletextView.setText(noticeset.get(position).gettitle());
datetextView.setText(noticeset.get(position).getdate());
}
@Override
public int getItemCount() {
return noticeset.size();
}
And this is main
public class NoticeMngActivity extends AppCompatActivity {
private ListView listView;
private noticeListAdapter adapter;
private List<notice> noticeList = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notice_mng);
Intent intent = getIntent();
Button writeBtn = findViewById(R.id.writeButton);
writeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {//Write버튼 누르면 writeactivity로 이동
Intent intent = new Intent(getApplicationContext(), NoticeWriteActivity.class);
startActivity(intent);
}
});
createNoticeGroups();
}
private void createNoticeGroups()
{
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("notice").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if(task.isSuccessful()){
final ArrayList<notice> noticeList = new ArrayList<>();
for(QueryDocumentSnapshot document : task.getResult()){
noticeList.add(new notice(document.getData().get("title").toString(),
(ArrayList<String>)document.getData().get("content"),
document.getData().get("date").toString()));
//Log.d("로그:", "데이터 : "+document.getData().get("title").toString());
}
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(NoticeMngActivity.this));
RecyclerView.Adapter mAdapter = new noticeListAdapter(NoticeMngActivity.this, noticeList);
recyclerView.setAdapter(mAdapter);
} else{
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});