안드로이드 개발 질문/답변
(글 수 45,052)
현재 구현 하고 있는건 텍스트뷰에 db값을 불러와 텍스트 뷰에 보여 지고 스피너에서 선택 하면 그 값이 바뀌어 텍스뷰에 보여지고
다시 저장 되는 것인데
저장을 하고 다시 수정을 위해 보면 텍스트 뷰가 스피너 맨 처음 값으로 바뀌어 있습니다.
제가 하려는건 수정 전값이 텍스트 뷰에 보여 지는 것입니다
db에는 저장이 되는데 텍스트 뷰에 보여지는 것이 맨 처음 값이네요. 조언을 부탁 드려요.
package com.sung.item_regi;
import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView;
public class item_regi_edit extends Activity implements OnClickListener, OnItemSelectedListener{
DBHelper mDBHelper;
TextView p1;
EditText p2,p4,p5,p6,p7;
int mId;
String item;
ArrayAdapter<String> adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.regi_edit);
p1 = (TextView)findViewById(R.id.spintv);
p2 = (EditText)findViewById(R.id.regiet_edit2);
p4 = (EditText)findViewById(R.id.regiet_edit4);
p5 = (EditText)findViewById(R.id.regiet_edit5);
p6 = (EditText)findViewById(R.id.regiet_edit6);
p7 = (EditText)findViewById(R.id.regiet_edit7);
String[] arrayItems = {"","의류","악세사리","가전","맛집","뷰티","문구","기타"};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, arrayItems);
Spinner spinner = (Spinner)findViewById(R.id.regiet_spin);
spinner.setPrompt("분류를 고르시오.");
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
Intent intent = getIntent();
mId = intent.getIntExtra("ParamID", -1);
item = intent.getStringExtra("ParamDate");
mDBHelper = new DBHelper(this);
SQLiteDatabase db = mDBHelper.getWritableDatabase();
if(mId == -1){
p1.setText(item);
} else{
Cursor cursor = db.rawQuery("SELECT * FROM item WHERE _id='" + mId + "'", null);
startManagingCursor(cursor);
if(cursor.moveToNext()){
p1.setText(cursor.getString(1));
p2.setText(cursor.getString(2));
p4.setText(cursor.getString(4));
p5.setText(cursor.getString(5));
p6.setText(cursor.getString(6));
p7.setText(cursor.getString(7));
}
}
mDBHelper.close();
Button btn = (Button)findViewById(R.id.regiet_save_btn);
btn.setOnClickListener(this);
btn = (Button)findViewById(R.id.regiet_del_btn);
btn.setOnClickListener(this);
btn = (Button)findViewById(R.id.regiet_back_btn);
btn.setOnClickListener(this);
}
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
p1.setText(adapter.getItem(arg2));
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
public void onClick(View v) {
// TODO Auto-generated method stub
SQLiteDatabase db;
switch(v.getId()){
case R.id.regiet_save_btn:
if(mId != -1){
db = mDBHelper.getWritableDatabase();
db.execSQL("UPDATE item SET p1='"+ p1.getText().toString()
+ "', p2='" + p2.getText().toString()
+ "', p4='" + p4.getText().toString()
+ "', p5='" + p5.getText().toString()
+ "', p6='"+ p6.getText().toString()
+ "', p7='"+ p7.getText().toString()
+ "' WHERE _id='"+mId+"';");
mDBHelper.close();
} else{
db = mDBHelper.getWritableDatabase();
db.execSQL("INSERT INTO item VALUES(null, '"
+ p1.getText().toString() + "', '"
+ p2.getText().toString() + "', '"
+ "" + "', '"
+ p4.getText().toString() + "', '"
+ p5.getText().toString() + "', '"
+ p6.getText().toString() + "', '"
+ p7.getText().toString() + "');");
mDBHelper.close();
}
break;
case R.id.regiet_del_btn:
if(mId != -1){
db = mDBHelper.getWritableDatabase();
db.execSQL("DELETE FROM item WHERE _id='"+mId+"';");
mDBHelper.close();
} else{
}
break;
case R.id.regiet_back_btn:
finish();
break;
}
Intent intent = new Intent(this, item_list.class);
startActivity(intent);
}
}




oncreate에서 textview 에 값이 할당되고 나서, 스피너를 건들지 않아도 onItemSelected가 호출되는 것으로 알고있습니다.
즉, 첨에 할당되고 다시 스피너 엔트리 첫 값으로 재할당 될 것 같은데요.
onItemSelected에서는 임시변수에 저장시켜두시고 db에 업데이트 하실때 임시변수 값을 쓰시면 될 것 같으네요