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

리스트를 재사용 할 수있나요? [closed]

0 추천
처음에 앱을 실행 했을 때, 현재 날짜의 값을 받아서 todayDate라고 저장을 하고,

DB에서 해당 날짜에 담긴 TV프로그램 값들을 담아서 list에 뿌려주는 걸 하고있습니다.

금요일:금요일뉴스,당신이궁금한이야기

토요일:토요일뉴스,그것이알고싶다

이런 값들이 있구요. date 구별을 해서, select할 때 날짜로 구분해서 값을 가져옵니다.

로그캣 창을 봤을 때 해당 날짜 양일 모두 당일날의 프로그램값들을 잘 가지고 있습니다.

 

처음 앱을 시작할 때는 list에 해당 값이 잘 받아집니다.

ArrayList<String> tempList = new ArrayList(); 라는 arraylist를 사용하는데요,

리스트뷰하나로 여러번 돌려쓸 수 없는건가요? 한 리스트를 가지고 db 값만 바꿔서 뿌려주고 싶은데, null 에러가 납니다.

처음에 앱을 실행할 땐 오늘 값은 잘 받아옵니다.

하단에 날짜선택 버튼이 있고, 오늘로 돌아가기 버튼이 있는데,

날짜버튼을 누르면 사용자가 원하는 날짜의 값도 '2014-01-01' 이런식으로 잘 받아옵니다. db값도 물론 있구요.

선택날짜와 오늘로 돌아가기 버튼을 누르면 에러가 고스란히 뜨네요..

리스트를 재 사용할 때 초기화나 그런걸 해야하나요..?
질문을 종료한 이유: 자답입니다.
anci (19,950 포인트) 님이 2014년 2월 14일 질문
anci님이 2014년 2월 14일 closed
뭔가 요즘 계속 자답인 듯한..ㅡㅡ;;ㅋㅋ
질문드렸던 tempList가 문제가 아니라, 맨 위에 arryList,listview,adapter가 엉망진창이었습니다. 한개씩 선언해야 하는데 어떤건 한개, 어떤건 두개..뒤죽박죽 이어서 백번천번 리스트를 갱신해도, 그 리스트에 나오지 않던거죠..제가 갱신을 원하는 list가 1이라고 치면, 1만 사용해야 하는데 위에서 두개 선언해서 2에다가 뿌려주고 있었어요...아 바보같다 ㅠㅠㅠㅠ

1개의 답변

+2 추천
 
채택된 답변
ArrayList<String> tempList = new ArrayList();

이정보가 연결된 listviewAdapter가 있을건데요.. 그걸 초기화화면서 tempList를 파라메터로 넘겨주셨을 겁니다.

그 이후부터 tempList의 값을 변경하고 listviewAdapter.notifyChangedDataset(); 메소드를 사용하여 리스트뷰를 갱신하면 되는데요..

재사용이라고 하면

tempList.clear();

new String[] newDataArray = db.querySearchNewData();

for (String info : newDataArray) {

  tempList.add(info);

}

listviewAdapter.notifyChangedDataset();

위와 같은 과정을 타면 되죠.
dante2k (8,390 포인트) 님이 2014년 2월 14일 답변
anci님이 2014년 2월 15일 채택됨
답변 감사합니다!
혹시 더 여쭤봐도 될까요?
전체적인 로직은
시작[onCreate]할 때 오늘의 프로그램을 tempList에 담아서 보여줍니다.
이건 확실히 했습니다.
그리고 밑에 오늘 버튼을 눌러서 list clear도 했습니다.
변함없이 오늘의 프로그램이 보여야 하는데, list가 다시 비어버립니다. notifychangedDataset을 해도 그렇구요.
처음 onCreate했을 때 리스트 작업과 변수명도 동일하게 하고,
그냥 버튼 누를 때 이전 값을 지우기 위해 clear를 하면 안되나요..?
Log.d로 확인해봤는데,
버튼이벤트 부분의 코드를 좀 잘라서 올려주시면 답변하는데 도움이 될 것 같은데요.. 지금 상태로는 이벤트를 어떻게 처리하신지 몰라 예측할 수 밖에 없습니다.
리스트가 비어보인다면
혹시나 tempList.clear(); 하신다음에.
tempList = new ArrayList<String>(): 등의 작업이 있었는지와 db에서 정보가 정상적으로 넘어왔는지 등을 알아야 하는데 코드가 없으니 뭐라 답하기가 그렇습니다.
아 댓글이 많이 늦었습니다. 죄송합니다. 전체적으로 구조 보여드리겠습니다.
public Button btn_today; //오늘

ArrayList<String> timeList = new ArrayList<String>();
adapter = new ArrayAdapter<String>(this,R.layout.listview_text2,R.id.listText2,timeList);
tlistView.setAdapter(adapter); //리스트뷰랑 어댑터 연결


//처음에 실행했을 때는 오늘날짜의 프로그램명들이 리스트에 출력됩니다[이건 정상적으로 나옴]
ArrayList temp = select_day(nowdate); //nowdate가 오늘 날짜입니다.

switch(v.getId())
        {
            case R.id.btn_today: //오늘 버튼 클릭
       
                timeList.clear();
                ArrayList temp = select_day(nowdate);
                for(int i=0; i < temp.size(); i++)
                {
                    Log.d("포문안으로to","포문안으로옴to");
                    timeList.add(temp.get(i).toString());   
                    Log.d("포문끝?to","끝to");
                }
                adapter.notifyDataSetChanged();
                Log.d("오늘2","조회완료2");
        }


그리고 select_day 함수 부분입니다.
public ArrayList select_day(String date){
            ArrayList<String> tempList = new ArrayList();
            try{
                //db 셀렉트함 가져온 date[오늘날짜]로 조회함. 정상적으로 작동합니다.
                cursor 사용해서 String temp 변수에 해당 프로그램 명을 담아줍니다.
                tempList.add(temp);
                //db닫고
                //커서도 닫고

                }catch(Exception e){
                    e.printStackTrace();
                }
           
                return tempList;
            }
이런식으로 했습니다. 로그 찍었을 때 오늘버튼을 비롯해서 다른날짜 선택했을 때 temp 값은 그대로 잘 들어옵니다.
공통적으로 들어가는게 이부분인데,  처음 실행했을 때 리스트만 값이 들어있고, 나머지는 들어오지 않습니다. for문도 정상적으로 작동했습니다.
ArrayList temp = select_day(nowdate);
    for(int i=0; i < temp.size(); i++)
                {
                    Log.d("포문안으로to","포문안으로옴to");
                    timeList.add(temp.get(i).toString());   
                    Log.d("포문끝?to","끝to");
                }
최초 실행시 한번은 나온다면 일단 로직상으로는 정상적으로 작동하는 것으로 보입니다. 혹시 switch 문을 사용하셨는데 break; 를 빼먹으셨는지요;;
위 코드상으로는 전혀 문제가 없습니다.
아, 집에 오느라 답이 늦었습니다..
break는 확실하게 밑에 다 달았습니다.;
오늘[btn_today] for문 끝나고 break로 나가기 전에 log.d로 값 들어왓나 확인 했는데 들어와있네요 ...timeList.add 했는데 왜 안보이는건지 ㄷㄷ
...