사이트에있는
류종택님의 동영상 강좌 #3 -DB다루기 기초를 공부하고 있습니다.
공부하는 소스는 EditText 에서 값 입력 후 키보드 enter키를 쳐서 db(SQLite)에 값을 넣고 ListView에 목록이 뜨고 갱신되는 소스입니다.
ListView에 뜬 목록들을 마우스로 클릭시 intent를 통하여 다른 화면으로 가서 수정,지우기 기능 등등을 추가하려고 생각 중이였습니다.
그래서 클릭이벤트를 구현하였지만 해당 목록의 (SN)값은 불러오지 못하고 있습니다.ㅠㅠ
수정하려는 목록을 클릭하여 다른 화면으로 넘어갈때 인텐트를 통하여 선택한 글의 정보가 담긴(SN)를 같이 넘겨 구분하려합니다.
이렇게 하는게 맞나요?
조그마한 힌트라도 주시면 감사하겠습니다^^ 그럼 수고하세요.
=====================================
Main.java
=====================================
package ryu.beginner; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); _TodoList = new TodoList(this); _edTitle = (EditText) findViewById(R.id.edTitle); _edTitle.setOnKeyListener(on_KeyEvent); _ListView = (ListView) findViewById(R.id.ListView); _ListView.setAdapter(_TodoList.Adapter); // 리스트 클릭 이벤트 _ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(Main.this, "123", 1000).show(); } }); } private TodoList _TodoList = null; private EditText _edTitle = null; private ListView _ListView = null; private View.OnKeyListener on_KeyEvent = new View.OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { if (keyCode == KeyEvent.KEYCODE_ENTER) { _TodoList.Append(_edTitle.getText().toString()); _edTitle.setText(""); return true; } } return false; } }; }
======================================
TodoList.java
======================================
package ryu.beginner; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.SimpleAdapter; public class TodoList { public TodoList(Activity AActivity) { super(); _Activity = AActivity; _DB = _Activity.openOrCreateDatabase("TodoList", _Activity.MODE_PRIVATE, null); _DB.execSQL("CREATE TABLE IF NOT EXISTS TodoList (SN integer Primary Key AutoIncrement, Title varchar)"); // TodoList = new ArrayAdapter<String>(_Activity, android.R.layout.simple_list_item_2, _TodoList); Adapter = new SimpleAdapter( _Activity, _TodoList, android.R.layout.simple_list_item_2, new String[] { "SN", "Title" }, new int[] { android.R.id.text1, android.R.id.text2 } ); Refresh(); } private ArrayList<HashMap<String,String>> _TodoList = new ArrayList<HashMap<String,String>>(); public BaseAdapter Adapter = null; public void Refresh() { _TodoList.clear(); Cursor _Cursor = _DB.rawQuery("Select * from TodoList", null); if (_Cursor.moveToFirst()) { do { HashMap<String,String> _Item = new HashMap<String,String>(); _Item.put("SN", _Cursor.getString(0)); _Item.put("Title", _Cursor.getString(1)); _TodoList.add(_Item); } while (_Cursor.moveToNext()); Adapter.notifyDataSetChanged(); } } public void Append(String ATitle) { _DB.execSQL("Insert into TodoList (Title) values ('"+ ATitle +"')"); HashMap<String,String> _Item = new HashMap<String,String>(); _Item.put("SN", Integer.toString(getLastRowID())); _Item.put("Title", ATitle); _TodoList.add(_Item); Adapter.notifyDataSetChanged(); } public int getLastRowID() { Cursor _Cursor = _DB.rawQuery("Select last_insert_rowid() from TodoList", null); if (_Cursor.moveToFirst()) { return _Cursor.getInt(0); } else { return -1; } } private Activity _Activity = null; private SQLiteDatabase _DB = null; }
===================================
main.xml
===================================
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <EditText android:layout_width="fill_parent" android:id="@+id/edTitle" android:layout_height="wrap_content" android:text="" android:hint="입력하세요~"></EditText> <ListView android:id="@+id/ListView" android:layout_width="fill_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>
공지사항을 다 읽었음
Main.java 에서 position 값을 이용하라는 힌트를 주셔서
_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
if(position==0){
_edTitle.setText("ㅇㅇ0");
}
else if(position==1){
_edTitle.setText("ㅇㅇ1");
}else if(position==2){
_edTitle.setText("ㅇㅇ2");
}else if(position==3){
_edTitle.setText("ㅇㅇ3");
// 5번째 목록을 클릭했을때 해당 db값을 가져와 보려고 합니다.
}else if(position==4){//해당 목록 position값
//int a = _TodoList.getLastRowID();
int a = _TodoList.search(position);//Todolist의 search() 으로 목록값( position )을 넘겨줍니다
_edTitle.setText("결과값은:"+a);
}
}
});
=======================================
TodoList.java search를 만들어서 position값을 넘겨 select하여 결과값을 가져와보았습니다.
=======================================
public int search(int position){
//position값을 아직 제대로 이해하지 못하여 임의로 바꿔주면서 테스트 중입니다..
Cursor _Cursor = _DB.rawQuery("Select Title from TodoList where SN='"+(position-1)+"'", null);
if (_Cursor.moveToFirst()) {
return _Cursor.getInt(0);
} else {
return -1;
}
}
=============================================
힌트를 주신 분들께 감사드립니다^^..(좀더 테스트하면서 완성해야하지만 숨통을 틔여주셔서 감사해요^^)
이제 가져온 값으로 인텐트하는 것을 시도해 봐야겠습니다.
다시 열공모드루 ~~
해당 리스트를 표시하는 커스텀어댑터에서 값을 가져올수 있으실텐데...
어레이.get(position).xxxx 방식으로말이죠...
전에 제가 했었던 방식은
hospi.get(position).cName 형식으로 해당 리스트뷰의 터치 입력을 받은 위치의 병원명을 가져와서 putExtra로 다른 액티비티로 넘겨서
처리하는 형식으로 되어있습니다.
hospi는 커스텀리스트어댑터의 ArrayList 입니다.
이런방식을 이용하시면 될것 같네요.
인텐트 넘기실때 정보를 넘기는 방법을 말씀 하시는거 같은데 맞나요?
Intent 를 넘기실때 intent.putExtra("SN", "DB에거 가져온 값"); 이렇게 담아서 넘기시구요.
받는 Activity에서 String temp = getIntent().getStringExtra("SN"); 와 같이 하시면 됩니다.