@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
Log.d("..........getview","getview");
View v = convertView;
//v=getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
if(v==null)
{
v=getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
}
else
{
}
msg_edit = (EditText)v.findViewById(R.id.msg_edit);
msg_edit.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
//입력되는 텍스트에 변화가 있을 때
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
//입력 전
}
@Override
public void afterTextChanged(Editable s)
{
// TODO Auto-generated method stub
//입력 후
//Log.d("텍스트 입력 후","텍스트 입력 후");
//텍스트 입력 완료 후 값을 저장.
for(int k=0;k<50;k++)
{
if(position==k)
{
Log.d("현재 editText 포지션은?",Integer.toString(k));
}
}
String text = msg_edit.getText().toString();
if(!text.equals(""))
{
Log.d("입력한 text: ",text);
}
SharedPreferences.Editor editor = pref.edit();
editor.putInt("array_size", editArray.length);
for(int i=0;i<editArray.length; i++)
{
editor.putString("array_"+i, editArray[i]); //저장
}
editor.commit();
}
});
밑의 부분은 코드가 별로 없어서 주요 코드만 올렸습니다.
10개에서 50개로 리스트값을 늘린 후, [여기서 추가 삭제 없이 고정적인 값]
50개의 리스트뷰에 있는 50개의 editText값을 저장하고 , 입력하려고 합니다.
afterTextChanged 에서 editText의 값이 변화 된 후에, sharedpreference로 저장하려고 하는데요,
맨 처음 앱을 실행 한후, 스크롤 없어 0번째 즉, 맨 첫번째 editText에 값을 입력하면
로그 - 현재 editText 포지션은? 에서 position값을 0으로 잘 받아옵니다.
문제는, 스크롤을 하고 나서 입니다. 재사용의 이유로 겟뷰가 계속 호출되다보니,
스크롤을 막 하다가, 다시 맨 위로 올라와서 0번째 editText에 글을 쓰면 포지션값이 0이 아니라
0,6,12,....여러 값이 동시다발적으로 로그에 찍힙니다. 한 화면에 보여지는 리스트 값이 5개구요, 그 때문에
특정 간격의 숫자로 저렇게 찍히는거같습니다. 0번째의 텍스트가 6,12..등등 중간중간에 나오는걸 보면요.
현재 수정중[afterTextChanged]인 editText포지션값만 정확하게 받아올 수는 없을까요?...
getview의 문제라면 다른 방법으로 리스트뷰를 구현해야하는지요?
+
지금 포지션값 로그찍히는걸 확인해보니, 맨 마지막 값이 지금 현재 수정중인 editText값 포지션이더군요.
가령 5번을 수정중인데, 여러값이 뒤죽박죽 나왔다가 맨 마지막 포지션값이 5로 나옵니다. 이걸 가지고
어떻게 할 수 있을까요?