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

listview 갱신에 관한 질문입니다.

0 추천

 ArrayList로 [이름, 주소, 전화번호]를 listview에 출력시켜 이름으로 검색하는 어플을 만들고 있습니다.

그런데 edittext에 쓴 이름으로 검색해서 결과값을 기존 listview에 다시 갱신시켜 출력시키려 하는데

이 과정에서 자꾸 문제가 생기네요... 로그캣을 확인해봐도 무슨말인지 모르겠습니다ㅠ

처음 개발하는 단계라 막막하네요..


public class MainActivity extends Activity
{

 ListView list;
 ArrayList<MyData> dataArr;
 ArrayList<MyData> resultArr;
 MyAdapter mAdapter;
 ArrayAdapter<String> adapter;
 
 @Override
 public void onCreate(Bundle savedInstanceState) 
 {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

     list = (ListView) findViewById(R.id.listview);
     AutoCompleteTextView getname = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.id.name_tv, android.R.layout.simple_dropdown_item_1line);
     
     getname.setAdapter(adapter);
     
     dataArr = new ArrayList<MyData>();
     resultArr = new ArrayList<MyData>();
     dataArr.add(new MyData("홍길동","서울","010-1111-1111"));
     dataArr.add(new MyData("둘리","인천","010-2222-2222"));
     dataArr.add(new MyData("또치","부산","010-3333-3333"));
     dataArr.add(new MyData("도우너","대구","010-4444-4444"));


     mAdapter = new MyAdapter(this, R.layout.list_item, dataArr);
     list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
     list.setAdapter(mAdapter);
 }
//...중략

Button searchbtn = (Button)convertView.findViewById(R.id.searchbtn);
searchbtn.setOnClickListener(new Button.OnClickListener()  
            {
             public void onClick(View v)  
                {
                 EditText getname = (EditText)findViewById(R.id.inputtext);
              ArrayList<MyData> myDataArr = new ArrayList<MyData>();
              for(int i = 0; i < myDataArr.size(); i++)
              {
               MyData getData = myDataArr.get(i);
               if(getData.name.indexOf(i) > 0)
               {
                resultArr.add(getData);
               }
              }
              adapter.notifyDataSetChanged();
                }
             });

 

인장씨 (120 포인트) 님이 2013년 12월 1일 질문

2개의 답변

0 추천
for(int i = 0; i < myDataArr.size(); i++)
{
	MyData getData = myDataArr.get(i);
	if(getData.name.indexOf(i) > 0)
	{
		resultArr.add(getData);
	}
}

이부분 조건문을 잘못주신게아닌가요?

그대로 보자면 myDataArr의 사이즈만큼 for문을 돌면

순차적으로 i가 0, 1, 2 등의 값을 가질텐데

getData.name이건 이름같은데 이름에서 0, 1, 2 등의 숫자를 찾아봐야 당연히 못찾고 

계속 -1을 리턴할텐데 그럼 결국 add도 안되고 갱신해봐야 결과가 안나올것같은데요..

indexOf 메소드의 사용법을 제대로 이해하시지 못하신것같습니다.

 

얼룩돼지 (15,720 포인트) 님이 2013년 12월 2일 답변
맞는 말씀이네요 ㅇㅇ..................
0 추천
searchbtn 안의 리스너에 아래 코드로 변경하세요.

 

 

EditText getname = (EditText) findViewById(R.id.input);

//검색할 이름을 가져옴

String name = getname.getText().toString();

//검색 결과를 담을 arraylist 객체 생성

ArrayList<MyData> searchResult = new ArrayList<MyData>();

for(int i=0; i < myDataArr.size(); i++) {

MyData getData = myDataArr.get(i);

 

//검색할 이름과 같으면 searchResult에 집어넣음

if(getData.name.equals(name))  searchResult.add(getData);

}

 

//검색 결과를 표시할 리스트 생성

mAdapter = new MyAdapter(MainActivity.this, R.layout.list_item, searchResult);

list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

list.setAdapter(mAdapter);

 

 

 

코드가 좀 많이 바뀌었네요. 이해 안 가시는 부분 있으시면 물어보세요^^
방귀과장 (18,940 포인트) 님이 2013년 12월 2일 답변
아답터를 새로생성하면 포지션이 유지가 안됩니다 --ㅋ
검색 결과를 보여줄 텐테 왜 포지션을 유지해야 하나요??
해결됐습니다^^ 감사합니다~!
...