지금 그리드를 써서 달력을 만들고 클릭을 하면 내용을 수정하게 하고 싶습니다.
그럴려면 그리드 안의 각 TextView들의 id를 알아야 수정을 하거나 할 수 있을 것 같은데
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
에서 나오는 id와
grid.getItemIdAtPosition(position);
이렇게 해서 나오는 id가 모두 long값입니다.
그런데 이 값이 밑의 함수에서 쓰려면 int만을 인자로 받기에 int로 바꿔서
TextView text = (TextView)findViewById(id);
이렇게 써버리면 런타임 에러가 떠버립니다...
왜 같은 id값 같은데 하나는 long으로 리턴해주고 하나는 int를 요구하는 걸까요?
그리고 어댑터 뷰 안의 item의 내용을 수정하려면 여러분들은 어떻게 하세요?
그리고 그리드의 한 행의 높낮이를 조절하는 방법은 없겟죠?
음 제가 우선 어댑터뷰에 대해 잘 모른다고 고백부터 해야겟네요.
저는 아답터 클래스를 따로 정의하지 않았고
mGrid = (GridView) findViewById(R.id.grid);
mGrid.setAdapter(new ArrayAdapter<String>(this, R.layout.grid_item, R.id.text, NUMBERS));
이런식으로 만들었습니다.
아답터 클래스를 정의만 해놓으면 알아서 실행되는 내부동작을 이해할 수가 없어서 (설명받을곳도 없어서)
쓰지 못했었죠.
결국 위와 같은 문장으로만 간단하게 TextView로 가득찬 배열을 만들었습니다.
아무튼 윗분의 답변을 이해할 수 없는 입장이고... view.findViewById(id)역시 에러가 납니다...
그리고 역시 id를 int로 받지, onItemClick의 4번째 파라미터인 long형과 다른 것 같습니다...
미치겟네용 ㅠㅠ
TextView text = (TextView)view.findViewById(R.id.text); text.setText("변경내용"); mGrid.invalidate(); 이렇게 해보세요
으으... 그 변경하고 싶은 TextView가 동적으로 많이 많이 생성됩니다...
즉 R.id.text가 각 그리드 칸마다 생기는데... 저는 그 중 특정 하나를 바꾸고 싶어요!!
position(순서) 값을 아니까 grid.getItemIdAtPosition(position); 이렇게 하면
id를 long타입으로 리턴해 주는데
TextView text = (TextView)view.findViewById(id);
그 long타입의 변수를 이렇게 파라미터에 넣어도 마치 될 것 같지만 에러가 뜬다는 말이에요!!




2번째 파라미터를 이용해서 변경해 주어야 합니다. 그리고 에러가 나는 이유는 아답터에서 getView메소스안에서 변경하는 것처럼 아이템 레이아웃을 선언한다음에 view.findViewById 이런식으로 접근해야 하기 때문입니다. 또한 파라미터에 있는 id값은 item 레이아웃 id값인듯 합니다.