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

listview 질문입니다. [closed]

0 추천

listview 에 edittext 를 두고 edit 에 입력받아서 배열에 순서대로 저장시켜두려고 하는데요.

 
 
SearchListData data = new SearchListData();
 
listArr = new ArrayList<SearchListData>();
 
for (int i = 0; i < 10; i++) {
data.setStrUrl("");
data.setStrSearch("");
listArr.add(data);
}
mListAdapter = new MyAdapter();
list_url.setAdapter(mListAdapter);
list_url.setDivider(null);
 
class MyAdapter extends BaseAdapter  {
 
 
@Override
public int getCount() {
return listArr.size();
}
 
@Override
public Object getItem(int position) {
return listArr.get(position);
}
 
@Override
public long getItemId(int position) {
return position;
}
 
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inf = getLayoutInflater();
View v1 = inf.inflate(R.layout.list_item, null);
return v1;
}
 
}

이렇게 임의대로 10개의 row 를 만들어서 리스트뷰는 정상적으로 뜨는데... 리스트뷰가 갱신된다고 해야될까요

스크롤이 넘어간다거나 할때마다 전에 기록한게 다 사라져 버리는데.. 이방법으로 풀수 있는 방법이 있는지 궁금합니다.

이 방식으로 안된다면 .. 어떻게 해야 할지 ...알고싶습니다.

 

질문을 종료한 이유: 해결
숀화이트 (3,310 포인트) 님이 2014년 7월 23일 질문
숀화이트님이 2014년 7월 23일 closed
edit.setOnEditorActionListener(this);
edit.addTextChangedListener(textWatcherInput);

2개의 답변

0 추천
스크롤이 넘어가거나 다른 페이지로 갈 때.. 기록한게 사라진다는건가요?

eidtText의 값[리스트뷰에 채워넣는값]을 저장하고 싶으시면 db등을 사용하셔서 값을 저장하시면 될거같아요.
anci (19,950 포인트) 님이 2014년 7월 23일 답변
제 질문이 이상했나 봅니다.. 리스트뷰에 10개의 row가 있습니다.
그중 첫번째 edittext 에 글을 쓰다가 아홉번째 edittext 에 글을 쓰러 내려가면 모든 listview 초기화 됩니다.
지금 하고 싶은건 10개의 row 에 edittext 에 값을 입력받고 제가 시작 버튼을 누르면 10개의 값들로 프로그램을 실행하고 싶은겁니다. 그럴려면 10개의 edittext 에 값이 입력이 되어야 하는데 첫번째꺼 입력하고 두번째꺼 입력하려고하면 listview 가 초기화가 되는겁니다. 스크롤을 내리거나 텍스트창을 올리거나 내릴때 listview 는 계속해서 초기화가 됩니다.
흐음..이상하네요.
값이 들어갔는데 레이아웃[리스트뷰]에서 안보이게 되는건지, 값을 넣었는데 값이 들어가지 않고 삭제되는 것인지, 확인을 해야할것 같습니다.
log로 해당 리스트뷰의 [0]번째부터 [n]번째까지 값이 들어가있나 확인하시는게 좋을 것 같습니다..
0 추천

ListView가 스크롤 되거나 만들어질 때는 getView에서 해당 View를 다시 그리게됩니다.

보니까 getView에는 아무 작업을 하지 않았으니 초기화 되는것이 당연합니다.

 

10개가 나오는 이유는 getCount() 부분에 listArr.size()를 하셔서 10개가 나오는것이고요.

return 4; 하면 4개만 나옵니다.

 

음 그러니까 ArrayList에 Data를 넣으면 getView에서 ArrayList에 있는 값을 참조해서 (position별로)

View에 넣어주게 만들면 됩니다.

q1212 (26,020 포인트) 님이 2014년 7월 23일 답변
네 그부분까지는 알고 있습니다. ..ㅜㅜ
혹시 edittext 의 이벤트중에 edittext에 입력이 되면 바로바로 배열에 저장할수 있는 속성이 있나요 ?!
제가 찾고 있는거와는 다르네요 ㅜ
TextWatcher를 사용하면 바로바로 입력되는 글자들을 알수있습니다.
그런데 입력즉시 저장하게되면 다른 문제점이 생길테고...

getView에서
LayoutInflater inf = getLayoutInflater();
View v1 = inf.inflate(R.layout.list_item, null);
TextView tv = (TextView)v1.findViewById(R.id.Textview의ID);

tv.setText(listArr.get(position).text);

이런식으로 해주시고 listArr만 원하는 글자 추가하면 알아서 추가됩니다.

단 notifyDataSetChanged해줘야 보이겠죠

최적화를 원하시면 ViewHolder패턴 검색!
마침 이부분에서 헤매고 있었는데 감사합니다!!
...