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

안드로이드 스튜디오 DatepickerDialog 관련 질문합니다!

0 추천

안녕하세요! 지금 DatepickerDialog를 이용해서 각 날짜를 선택하면 해당 날짜에 맞는 recyclerview 데이터를 출력하는 어플을 구현하려고 하는데 recyclerview 아이템의 값과 날짜의 값이 일치할때 데이터를 보여주는 식으로 데이터를 짜봤는데 이상하게 다른 날짜 값을 입력해도 계속 똑같은 아이템이 출력되더라고요... 혹시 코드상에 문제가 있는지 있다면 어떻게 고쳐야할지 알려주시면 정말 감사하겠습니다!

 

아래는 소스코드입니다.

package com.example.sportstab;

import android.app.DatePickerDialog;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.RequiresApi;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.Room;

import com.android.volley.RequestQueue;
import com.android.volley.toolbox.JsonArrayRequest;
import com.github.jhonnyx2012.horizontalpicker.DatePickerListener;

import org.joda.time.DateTime;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


@RequiresApi(api = Build.VERSION_CODES.N)
public class FirstFragment<horizontalCalendar, root> extends Fragment implements DatePickerListener {

    private List<Product_List> product_lists;
    private RecyclerView recyclerView;
    ProductAdapter adapter;
    Button selectDate;
    TextView date;
    DatePickerDialog datePickerDialog;
    int year;
    int month;
    int dayOfMonth;
    Calendar calendar;


    private JsonArrayRequest request;
    private RequestQueue requestQueue;
    public static FavoriteDatabase favoriteDatabase;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View root = inflater.inflate(R.layout.fragment_first, container, false);

        selectDate = root.findViewById(R.id.btnDate);
        date = root.findViewById(R.id.tvSelectedDate);

        selectDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    calendar = Calendar.getInstance();
                    year = calendar.get(Calendar.YEAR);
                    month = calendar.get(Calendar.MONTH);
                    dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
                datePickerDialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        date.setText(year + "년 " + month + "월 " + day + "일");
                            date.setText(year + "년 " + (month + 1) + "월 " + day + "일");
                        getData();
                    }
                },year,month,dayOfMonth);
                datePickerDialog.show();
            }
        });

        recyclerView=(RecyclerView)root.findViewById(R.id.recyclerview);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this.getContext()));

        product_lists=new ArrayList<>();

        favoriteDatabase= Room.databaseBuilder(getContext(),FavoriteDatabase.class,"myfavdb").allowMainThreadQueries().build();

        //getData();

        return root;
    }

    private void getData() {


        Product_List product_list = new Product_List(22, "스페인 프리메라리가", "세비야 vs 레알 베티스" , "2020.06.12 05:00", "https://pngimage.net/wp-content/uploads/2018/06/sevilla-fc-logo-png-2.png",
                "https://pngimage.net/wp-content/uploads/2018/06/real-betis-escudo-png-5.png");
        Product_List product_list2 = new Product_List(0, "경기 정보가 없습니다.", "" , "", "",
                "");

        if(product_list.getId() == dayOfMonth)
        {
            product_lists.add(product_list);
        }
        else{
            product_lists.add(product_list2);
        }
        //product_lists.add(product_list);

        setupData(product_lists);
    }

    private void setupData(List<Product_List> product_lists) {
        adapter=new ProductAdapter(product_lists,getContext());
        adapter.notifyDataSetChanged();
        recyclerView.setAdapter(adapter);
    }


    @Override
    public void onDateSelected(DateTime dateSelected) {
        Toast.makeText(getContext(),dateSelected.toString(),Toast.LENGTH_SHORT).show();
    }
}

 

slondy (160 포인트) 님이 2020년 6월 23일 질문

1개의 답변

0 추천

결론부터 말씀드리면 product_lists에는 product_list || product_list2 두개중에 한개의 값이 들어가도로 구성이 되어있습니다.  recyclerviewadapter를 set 하실때 product_lists가 들어 가기 때문에 항상 product_list || product_list2 둘중의 하나의 값만 보여지게 되는게 당연합니다. 

더 궁굼하신게 있으시면 myring100@gmail.com 

저도 앱홍보좀 ... 

https://play.google.com/store/apps/details?id=com.search.trackappusage

앱 평가와 다운로드는 정말 큰힘이 되는거 아시죠? 감사합니다! 

익명사용자 님이 2020년 6월 24일 답변
...