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

edittext로 리스트뷰 검색시 문자입력하다 지웠을때 리스트뷰의 첫번째 항목이 선택되는 이유가 뭔가요ㅜ

0 추천

리스트뷰 항목중에서 edittext로 키워드를 입력하여 검색하는 부분인데

edittext에 문자를 입력하다가 다 지우면 새로 리스트뷰가 생성되고나서

리스트뷰 첫번째 항목이 자동으로 선택되서 다음 액티비티로 넘어가지네요ㅠㅠ.....

왜 첫번째 항목이 자동으로 선택되는걸까요???

어떻게 해야 입력한 문자를 지워도 첫번째 항목이 선택이 안되고 원래 리스트뷰가 그대로 보여지게 되나요???

이것때문에 진도가 안나가네요ㅜㅜ

알려주세요~~~~~

public class CategorySelectActivity extends ListActivity {
 private String kor="";
 private String eng="";
 private String compare2="";
 private String categoryname="";
 private String search=""; 
 private int position=0;
 private int i=0;
 private TextView categorynameTextView; 
 private EditText searchEditText;
 private Handler skhandler = new Handler();
 ArrayAdapter<String>adapter;
 ArrayList<String>categorylist = new ArrayList<String>();
 ArrayList<String>korsentencelist = new ArrayList<String>();
 ArrayList<Sentence>sentencelist = new ArrayList<Sentence>();
 ArrayList<String>searchkorsentencelist = new ArrayList<String>();
 ArrayList<String>searchengsentencelist = new ArrayList<String>();
 //ArrayList<Sentence>search2sentencelist = new ArrayList<Sentence>();

 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  categorylist = getIntent().getStringArrayListExtra("categorylist"); //카테고리 리스트 get
  position = getIntent().getExtras().getInt("position"); //선택된 카테고리 위치 get
  categoryname = categorylist.get(position).toString();

  //System.out.println("position: " + position);
  //System.out.println("categoryname: " + categoryname);

  readSentence(position);  //선택된 카테고리에 맞는 문장 sentence 리스트에 추가

  setContentView(R.layout.activity_category_select);

  categorynameTextView = (TextView)findViewById(R.id.category_select);
  categorynameTextView.setText(categoryname);
  searchEditText = (EditText)findViewById(R.id.search); 
  search = searchEditText.getText().toString();

  //ArrayAdapter
  adapter = new ArrayAdapter<String>(this,R.layout.activity_category_list_item,R.id.category_list_item,korsentencelist);
  setListAdapter(adapter);
  getListView().setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
   public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3){
    String english = sentencelist.get(arg2).english;
    String korean = sentencelist.get(arg2).korean;
    Intent intent = new Intent(CategorySelectActivity.this, CategorySentenceActivity.class);
    intent.putExtra("korean", korean);
    intent.putExtra("english", english);
    intent.putExtra("categoryname", categoryname);
    startActivity(intent);
   }
   public void onNothingSelected(AdapterView<?> arg0){ }
  });

  skhandler.postDelayed(new Runnable() {
   @Override
   public void run() {
    // TODO Auto-generated method stub
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    //imm.showSoftInput(searchEditText, 0);
    //imm.showSoftInputFromInputMethod(searchEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED);
    //imm.showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED);
    imm.toggleSoftInputFromWindow(searchEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
   }
  }, 100);


//search
  searchEditText.addTextChangedListener(new TextWatcher() {

   //텍스트가 변경될때마다 발생할 이벤트를 작성
   public void onTextChanged(CharSequence s, int start, int before, int count) {
    CategorySelectActivity.this.adapter.getFilter().filter(s);
   }
   @Override
   //텍스트의 길이가 변경되었을 경우 발생할 이벤트를 작성
   public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
   @Override
   //텍스트 변경 후 발생할 이벤트를 작성
   public void afterTextChanged(Editable s) {}
  });

//뒤로 버튼을 눌렀을 때
  Button exitBtn = (Button)findViewById(R.id.exit_category);
  exitBtn.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v) {
    finish();
   }
  });
 }
 protected void onListItemClick(ListView l, View v, int position, long id){
  String english = sentencelist.get(position).english;
  String korean = sentencelist.get(position).korean;
  Intent intent = new Intent(CategorySelectActivity.this, CategorySentenceActivity.class);
  intent.putExtra("korean", korean);
  intent.putExtra("english", english);
  intent.putExtra("categoryname", categoryname);
  startActivity(intent);
 }
 protected void readSentence(int position)
 {
  InputStream is = null;
  BufferedReader br = null;
  StringTokenizer st;

  try{
   is = getResources().openRawResource(R.raw.datatext);
   br = new BufferedReader(new InputStreamReader(is, "euc-kr"));
   String line=new String("");
   while((line=br.readLine())!=null){ //마지막까지
    if(line.contains("ID:")){  //id가 포함되어있으면
     st = new StringTokenizer(line.replaceAll("ID:",""), " ");
     if(st.hasMoreTokens())  //토큰이 더 있으면
     {
      String str = st.nextToken().toString();  //id 
      compare2 = st.nextToken().toString() + st.nextToken().toString();  //ex) 관광지: + ****

      //사용자가 선택한 카테고리와 compare2가 같으면 해당 한글, 영어 문장 리스트에 추가
      if(categoryname.equals(compare2)) 
      {   
       eng = br.readLine();
       kor = br.readLine();
       //System.out.println("eng: " + eng);
       //System.out.println("kor: " + kor);

       korsentencelist.add(kor);
       sentencelist.add(new Sentence(eng, kor));
      }    
     }
    } 
   }
  } catch(IOException e) {
   e.printStackTrace();
  }
  finally{
   try{
    br.close();
    is.close();
   }catch(Exception e){
    e.printStackTrace();
   }
  }
 }
}
class Sentence{
 String korean;
 String english;
 public Sentence(String eng, String kor)
 {
  english = eng;
  korean = kor;
 }
}

 

. (120 포인트) 님이 2013년 10월 20일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...