안드로이드 개발 질문/답변
(글 수 45,052)
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);
}
};
}위 소스코드대로 했는데 리스트 뷰에 이벤트를 스크롤 리스너와 아이템 클릭 리스너 두개를 주었습니다. 그랬더니 스크롤 리스너는 잘 먹히는데 아이템 클릭 리스너의 경우 마우스 클릭이 안먹히고 키보드로 엔터 치는 것밖에 이벤트가 먹히지 않습니다.
그래서 스크롤이벤트를 주석처리 후에 실행했더니.. 이번엔 클릭리스너가 잘먹히는 겁니다..ㅡㅡ;;
원래 뷰 하나에는 이벤트 하나만 해야 하는건가요??
사전이라서 두개의 기능 다 필요한데.. 둘다 할 수 있는 방법이 없을까요?



