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

현재 editText 포지션값을 제대로 받아오지 못합니다.

0 추천
@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로 나옵니다. 이걸 가지고

어떻게 할 수 있을까요?

anci (19,950 포인트) 님이 2015년 1월 21일 질문
anci님이 2015년 1월 21일 수정

1개의 답변

+1 추천

addTextChangedListener로 계속 추가만 하니 문제가 생기는 듯 합니다.

addTextChangedListener 호출 전에 기존에 추가된 것을 모두 삭제하는 코드를 넣으세요.

익명사용자 님이 2015년 1월 21일 답변
댓글감사합니다. addText이전에 어떤걸 삭제하라는 것인지 잘 이해가 안갑니다.
TextWatcher를 삭제하세요.
...