일종의 사전 같은 어플을 개발중입니다.
제목대로 입력받은 값, 그러니까 listView의 목록 중 일부 단어만 받으면
우리가 인터넷에서 ctrl + f 를 사용해서 쓰는 것처럼 focus를 맞춰가면서
editText 옆의 버튼을 누를때마다 그 다음 검색결과로 넘어가게끔 코드를 짜고 싶습니다.
안드로이드를 수박 겉핥기라고 하기도 부끄러울 만큼 살짝 배운지도 일주일정도밖에 안되고
자바 기초지식도 매우 저조한지라 며칠간 찾아헤메다가 질문 드립니다.
(스샷을 찍어뒀는데 사진을 붙이는 방법을 모르겠네요..ㅠㅠ)
┌───────────────┐┌─┐
└───────────────┘└─┘
리스트 목록1
──────────────────
리스트 목록2
──────────────────
리스트 목록3
이런 식으로 생긴 뷰 입니다. 위의 긴 네모가 editText고 옆의 버튼이 클릭되면 focus를 맞추게 이벤트를 줄 계획입니다.
일단 제가 짜 본 코드는 이런 정도입니다.
String[] odorant = new String[] { "hydroxycalamenene","tetradecanol","heneicosane","phytol","5-oxymethylfurfurole","lauric acid","docosane","6-Methoxyeugenol","stearyl alcohol","methyl vanillate","ethyl vanillate","acetovanillone","3-oxo-α-ionol","tricosane" };
EditText editText1;
Button button1;
Message msg;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.m_list);
button1 = (Button) findViewById(R.id.button1);
editText1 = (EditText) findViewById(R.id.editText1);
final ListView list = (ListView) findViewById(R.id.list);
ArrayAdapter<String> adapter;
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, odorant);
list.setAdapter(adapter);
list.setOnItemClickListener(this);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String text = editText1.getText().toString();
list.setSelection(10);
for(int i = 0; i < odorant.length; i++) {
if (odorant[i].indexOf(text) != -1){
}
}
}
});생각하기로는 위에 썼던대로 editText의 입력된 값을 일부만, 그러니까
hydroxycalamenene 이라는 단어를 찾고 싶으면 중간의 drox만 써도 focus를 맞춰 화면이 그리로 이동하게,
그리고 버튼을 클릭할 경우 그 다음 찾은 값으로 이동하면서 되도록이면 알아보기 쉽게 효과도 주면 좋겠는데요.
일부만 이라는 생각에 indexof를 사용해 봤습니다만... 영 반응이 없어서 맞는건지 틀린건지도 잘 모르겠네요;;
값을 받아와서, 배열 내에서 그 값을 검색해서 값이 들어 있는 목록의 position을 받아 그것으로 포커스를 맞추게 하면 될 듯 한데요.
늘상 생각으로 이리이리 하면 되겠다 싶은데.. 막상 기초가 없다보니 코드로 작성할때 머리가 백지가 되는것 같습니다..
도와주세요~
공지사항을 다 읽었음 (검색도 해서 이건가 싶은건 다 읽었습니다.)
예... 감사합니다.
index에 position을 주니 되네요.. 문제는 제가 listView에서 position값을 받아올줄 모른다는게^^;;
editText에서 매번 다른 값을 주게 될테니.. 그 때 마다 postion값이 변동되는걸 받아야 하는데
하아,., ㅋㅋㅋ
저는 list.setSelection(position);이 나은것 같아요ㅎㅎ 여러개 찾다 보니 list 움직이는게 어지러워서요...헤헤 @ㅁ@
그냥 개인적인 의견이지만 전화번호부 검색처럼 앞에만 입력하면 앞에입력한 내용에 맞는것만 리스트에 다시 뿌려주는식이 괜찮을것같네요. 검색버튼 누룰필요없이. 한글자한글자입력할때마다 해당 내용을 담고 있는 리스트만 보여주는 식으로 다시 뿌려주는 방식이요.
EditText.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) {}
@Override
public void afterTextChanged(Editable s){}
});
이런식으로 이벤트주시면 검색된 결과 가져올때 한글자 입력할때마다 검색버튼 누를필요 없이 이벤트 내용 다시 가져 옵니다.




list.smoothScrollToPosition(index) 이걸 찾으시는건가요??;