package ran.android.activity;
import java.util.ArrayList;
import ran.android.dao.DBResolver;
import ran.android.data.DicListViewAdapter;
import ran.android.vo.MainItemData;
import ran.android.activity.R;
import ran.android.activity.R.id;
import ran.android.activity.R.layout;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.view.View.OnTouchListener;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
public class DictionaryActivity extends Activity {
 private final int DETAIL_VIEW_INTENT = 0;
 
 private ArrayList<MainItemData> words;
 private DicListViewAdapter adapter;
 private EditText search;
 int scrollDownCount = 2;
 int m = 1;
 
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DBResolver.initDB(this);
        words = DBResolver.getFirstDicWord(this);
        adapter = new DicListViewAdapter(this, R.layout.main_list_item, words);
        
        //리스트
        ListView mainList = (ListView)findViewById(R.id.dic_list);
        mainList.setAdapter(adapter);
        
        //단어 추가버튼
        findViewById(R.id.dic_add).setOnClickListener(AddWord);
        
        //검색 에디트 텍스트
        search = ((EditText)findViewById(R.id.dic_search));
        search.setOnKeyListener(WordSearch);
        
        //스크롤 이벤트
        mainList.setOnScrollListener(ScrollDown);
        //리스트 아이템 클릭
        mainList.setOnItemClickListener(ItemClick);
    
        
    }
 public boolean onCreateOptionsMenu(Menu menu) {
  
  MenuInflater menuInflater = getMenuInflater();
  menuInflater.inflate(R.menu.dic_menu, menu);
  
  return true;
 }
 
 public boolean onOptionsItemSelected(MenuItem item) {
  Intent intent;
  
  switch(item.getItemId()){
  
  case R.id.dic_move_voca:
   //intent = new Intent(this, VocabularyActivity.class);
   intent = new Intent(this, VocabularyActivity2.class);
   intent.putExtra("moveWay", 0);
   startActivityForResult(intent, 0);
   
   //this.finish();
   return true;
   
  case R.id.dic_move_blinker:
   intent = new Intent(this, BlinkerModeActivity.class);
   startActivity(intent);
   
   //this.finish();
   return true;
  }
  
  return false;
 }
 AbsListView.OnScrollListener ScrollDown = new AbsListView.OnScrollListener() {
  
  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount){
   ArrayList<MainItemData> additionWords;
   if(firstVisibleItem == 14+(20*(scrollDownCount-2))){
    m ++;
    if(m == 2){
     m = 0;
     
     additionWords = 
      DBResolver.getNextDicWord(DictionaryActivity.this,scrollDownCount);
  
     for(int index =0 ; index < additionWords.size() ; index++){
      words.add(additionWords.get(index));
     }
     scrollDownCount ++;
    }
   }   
   adapter.notifyDataSetChanged();
  }
  public void onScrollStateChanged(AbsListView arg0, int arg1) {}
 };
 
 AdapterView.OnItemClickListener ItemClick = new AdapterView.OnItemClickListener(){
  
  public void onItemClick(AdapterView<?> parents, View view, int position,
    long id) {
   Log.i("123123123","2222222222221");
   Intent intent = new Intent(DictionaryActivity.this, WordDetaileViewActivity.class);
   intent.putExtra("wordId", words.get(position).getId());
   startActivityForResult(intent, DETAIL_VIEW_INTENT);
  }
 };
 
 View.OnKeyListener WordSearch = new View.OnKeyListener() {
  //누를때 한번 호출, 뗄때 한번 호출! 총 두번 호출
  public boolean onKey(View view, int key, KeyEvent event) {
  
   //a =29 (char)(key+68) 대소문자 구분 x 시프트 값 =59
   if(event.getAction() == KeyEvent.ACTION_UP){
    if((27 < key && key < 55) || key==67){
     
     ArrayList<MainItemData> item = new ArrayList<MainItemData>();
     item = DBResolver.getChoicedWord(DictionaryActivity.this, 
       search.getText().toString().trim().toLowerCase());
     
     scrollDownCount = 2; //리스트가 새로 바뀌기 때문에
     
     if(item != null){
      words.clear();
      for(int i = 0 ; i < item.size() ; i++){
       words.add(item.get(i));
      }
      adapter.notifyDataSetChanged();
      view.scrollTo(0, 0);
     }
    }
   }
   return false;
  }
 };
 
 View.OnClickListener AddWord = new View.OnClickListener(){
  public void onClick(View view) {
   Intent intent = new Intent(DictionaryActivity.this, WordAddActivity.class);
   startActivity(intent);
  }
 };
 
}

위 소스코드대로 했는데 리스트 뷰에 이벤트를 스크롤 리스너와 아이템 클릭 리스너 두개를 주었습니다. 그랬더니 스크롤 리스너는 잘 먹히는데 아이템 클릭 리스너의 경우 마우스 클릭이 안먹히고 키보드로 엔터 치는 것밖에 이벤트가 먹히지 않습니다.

그래서 스크롤이벤트를 주석처리 후에 실행했더니.. 이번엔 클릭리스너가 잘먹히는 겁니다..ㅡㅡ;;

원래 뷰 하나에는 이벤트 하나만 해야 하는건가요??

사전이라서 두개의 기능 다 필요한데.. 둘다 할 수 있는 방법이 없을까요?