안드로이드 개발 질문/답변
(글 수 45,052)
제가 원하는 형태는 이런형태 입니다.
물론 CustomView를 만들어서 ArrayAdapter로 화면에 보이는 것까지는 했습니다.
화면상에는 제대로 나오고
문제는 EditText 클릭시 키보드가 올라오고 입력후에
키보드가 내려갈때 getView가 반복적으로 호출이 되서
EditText의 값이 초기화가 되어 버립니다.
많은 구글링을 해봤지만,
ListView 안에 textView나 ImageView, button을 넣는 것은 많이 보았는대
ListView 안에 EditText를 넣고 제어 하는 것이 없더군요.
ListView
----------------------------------------------------
TextView EditText
----------------------------------------------------
TextView EditText
----------------------------------------------------
TextView EditText
----------------------------------------------------
TextView EditText
----------------------------------------------------
TextView EditText
----------------------------------------------------
TextView EditText
----------------------------------------------------
제 코드는 다음과 같습니다.
public View getView(int position, View v, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.row, null);
BodyState bs = lists.get(position);
if (bs != null) {
TextView tv = (TextView) v.findViewById(R.id.adapter_text1);
EditText et = (EditText) v.findViewById(R.id.adapter_edit1);
if (tv != null) {
tv.setText(position + "");
et.setText(position + "");
}
}
return v;
}
2010.10.05 15:16:13
빠른 답변 감사합니다.
public View getView(int position, View v, ViewGroup parent) {
if (v == null) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.row, null);
}
BodyState bs = lists.get(position);
if (bs != null) {
TextView tv = (TextView) v.findViewById(R.id.adapter_text1);
EditText et = (EditText) v.findViewById(R.id.adapter_edit1);
if ((tv != null ) & (v != null)) {
tv.setText(position + "");
et.setText(position + "");
Log.d(LOG_TAG,"here!!!!");
}
}
return v;
}
이렇게 고쳐봤습니다. 역시나.. et.setText 부분이 반복적으로 호출이 되면서 값이 초기화가 되는 현상이 ㅠㅠ
2010.10.05 15:20:28
TextView tv = (TextView) v.findViewById(R.id.adapter_text1);
EditText et = (EditText) v.findViewById(R.id.adapter_edit1);
if ( tv != null) {
tv.setText(position + "");
}
if (et != null) {
et.setText(position + "");
}
이렇게 해보세요,,
2010.10.05 15:21:51
원래 getView가 호출되는 것은 자연스러운 현상입니다.
다만 getView가 호출될때 내용이 갱신되어야 하는게 문제인데...
해보지는 않았지만, getView가 호출되어야 하는 상황(뭔가 가려졌다가 나오는 상황)이 되기 전에 EditText의 내용이 바뀌면 실제 ArrayAdapter의 내용도 바꿔줘야겠죠.
(제가 보기에는 Adapter의 내용 자체는 안바뀌고 있는 것 같습니다만...)




if (v == null) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
이렇게 처리를 해 주셔야 될 것 같네요,,