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