마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Recyclerview 데이터 추가 시, 하나만 보여집니다.

0 추천

okButton을 클릭할 때 마다, 새로운 아이템(데이터)들이 RecyclerView로 차례로 저장되어야하는데 처음에 저장한 아이템만 보여집니다... 몇 날 며칠을 고민했는데도 도저히 답이 안나오네요 고수님들 답변 부탁드립니다ㅠㅠ

1. okButton 이 있는 코드

 okButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String recordtitle = recordTitle.getText().toString();

                recordObject saveRecordItems= new recordObject("2020/10/10",recordtitle,"5km"," 3:55");
                itemsList.add(saveRecordItems);

                Toast.makeText(context, "기록을 저장했습니다.", Toast.LENGTH_SHORT).show();

//                Log.d("list", String.valueOf(itemList.size()));

                // 커스텀 다이얼로그를 종료한다.
                mydlg.dismiss();
            }
        });

 

2. Adapter 부분 (viewHolder 는 생략했습니다)

public class RecordAdapter extends  RecyclerView.Adapter<RecordAdapter.ViewHolder> {

    ArrayList<recordObject> items;

    public RecordAdapter(ArrayList<recordObject> list){
        this.items = list;
    }

    public void add(recordObject item) {
        items.add(item);
//        notifyDataSetChanged();
    }

    @NonNull
    @Override

    //화면 최초 로딩하고, xml파일 inflate+ViewHolder 생성
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View itemView = inflater.inflate(R.layout.record_item, parent, false);

        return new RecordAdapter.ViewHolder(itemView);
    }

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

    public ArrayList<recordObject> getListData(){
        return items;
    }

    public void setListData(ArrayList<recordObject> listData){
        this.items= listData;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        recordObject item = items.get(position);
        holder.setItem(item);
    }

 

3. Recyclerview 가 차례로 나타나야 하는 곳!!

public class recordFragment extends Fragment {

    public static ArrayList<recordObject> itemsList = new ArrayList<>();
    public static RecordAdapter adapter;

    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_record, container, false);
        RecyclerView recyclerView = view.findViewById(R.id.recyclerView);

        if(adapter == null){
            adapter= new RecordAdapter(itemsList);
        }

        adapter.notifyDataSetChanged();
        recyclerView.setAdapter(adapter);   
        recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext())); 
        recyclerView.setHasFixedSize(true);

        return view;
    }

 

slpjenny (130 포인트) 님이 10월 12일 질문

1개의 답변

+1 추천
notifyDataSetChanged()나 notifyItemInserted()를 아이템을 추가한 다음에 호출해 주셔야 RecyclerView Adapter가 변경된 부분을 갱신해 줍니다. 그리고 화면에 보여지는 아이템의 갯수가 많다면 ListAdapter를 사용하시기를 권장합니다.
spark (12,230 포인트) 님이 10월 12일 답변
감사합니다! 오류 해결되었습니다.
...