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

textview동적생성시 질문입니다.

0 추천
     for(i=0;i<placenum.size();i++) {
            planame = new TextView(getContext());
            planame.setText(placename.get(i));
            planame.setGravity(Gravity.CENTER);
            planame.setHeight(100);
            planame.setWidth(100);
            planame.setTextSize(15);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                planame.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.button2));
            } else {
                planame.setBackgroundDrawable(ContextCompat.getDrawable(getContext(), R.drawable.button2));
            }
            li.addView(planame);

                Response.Listener<String> responseListener = new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            JSONArray jsonArray = jsonObject.getJSONArray("result");
                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject c = jsonArray.getJSONObject(i);
                                String date = c.getString("date");
                                String time = c.getString("time");
                                String temp = c.getString("temp");
                                plalist = new TextView(getContext());
                                plalist.setTextSize(16);

                                plalist.append(date + "          " + time + "          " + temp + "℃\n");
                                li.addView(plalist);

                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };
                PeriodRequest periodRequest = new PeriodRequest(mb_id, String.valueOf(placenum.get(i)), search_first_day,search_last_day, responseListener);
                RequestQueue queue = Volley.newRequestQueue(getContext());
                queue.add(periodRequest);
            }

이렇게 장소나오고 날짜랑 이런식으로 나오고싶은데 

제코드 대로 하면

이렇게 장소가 계속 붙여서 나오네요 ㅠㅜ

장소는 placename이라는 리스트에서 따오는거고

아래 날짜랑 시간 온도는 volley통신을 이용하여 디비에서 받아오는것입니다..

장소 날짜시간온도 / 장소 날짜시간온도 이렇게 하고싶습니다 ㅠㅜ

 

(코드에 span은 복붙해서 생긴거니까 무시해주세요)

한동욱 (410 포인트) 님이 2018년 7월 30일 질문

1개의 답변

0 추천
 
채택된 답변

일단 저렇게 뜨는 원인은 반복문 중간즈음에   li.addView(planame); 에서 장소 텍스트뷰를 이미 먼저 추가해버린 이후에 volley 통신 응답 리스너의  li.addView(plalist); 호출로 날짜/시간/온도값 텍스트뷰들이 추가되어서 저런식으로 뜨는듯 합니다. 즉 원하시는 건 헤더(장소) - 리스트(날짜,시간,온도)  //  헤더(장소) - 리스트(날짜,시간,온도) //  ....  // 이런 형태이실텐데 현재 코드로는 장소값인 헤더의 위치를 정해주지않고 바로 그냥 add 해버리기 때문에 헤더-해더-헤더... // 리스트-리스트-리스트... 이런형태로 계속 추가되게 됩니다. 보통 저런경우 리스트뷰(또는 리사이클러뷰)같은 목록형태의 뷰를 사용할텐데 텍스트뷰로 하시는건 새롭네요 ㅎㅎ;  여튼 후잡한 제 머리로는...될지는 모르겠지만.. addView메소드에 인자값으로 index값을 줄 수 있었던걸로 기억하는데 index값이 위치값이 아닐까 생각합니다.(확실하진 않아요ㅠㅠ) addView 사용법을 검색하셔서 해보심이 어떨지요~! 도움되길바랍니다 화이팅!

idontknow (6,380 포인트) 님이 2018년 7월 30일 답변
한동욱님이 2018년 7월 31일 채택됨
리스트뷰로 해서 해결했어여~답변감사합니다 !!
...