android開発を行っております。
DBから取得した1カラム分のデータをListViewのEditTextに各々表示させ、ListView内の各行に表示されている更新ボタンを押すと
EditTextに入力されている文字を更新して登録するというプログラムを作っています。
現在更新ボタンをおしたときに、position情報を取得するところまではできたのですが、
position情報からEditTextの情報を取得しても入力内容変更前のデータしか取得することができません。
参考になりそうな文献が少ないため、方法をご教授していただければ幸いです。
追記
●DataBaseActivity.java
public class DataBaseActivity extends ActionBarActivity { static final String DB = "sqlite_sample.db"; static final int DB_VERSION = 1; static final String CREATE_TABLE = "create table mytable ( _id integer primary key autoincrement, data integer not null );"; static final String DROP_TABLE = "drop table mytable;"; static SQLiteDatabase mydb; private SimpleCursorAdapter myadapter; private static final String TAG = MainActivity.class.getSimpleName(); private ListView listview; private Button addbtn, delbtn, addTxtbtn; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_data_base); MySQLiteOpenHelper hlpr = new MySQLiteOpenHelper(getApplicationContext()); mydb = hlpr.getWritableDatabase(); Cursor cursor = mydb.query("mytable", new String[] {"_id", "data"}, null, null, null, null, "_id DESC"); String[] from = new String[] {"_id", "data"}; int[] to = new int[] {R.id.db_id, R.id.db_data}; startManagingCursor(cursor); myadapter = new SimpleCursorBtnAdapter(this,R.layout.db_text, cursor, from, to,R.id.btn_update); listview = (ListView)findViewById(R.id.db_listView); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { update(parent,view,position,id); } }); listview.setAdapter(myadapter); } private static class MySQLiteOpenHelper extends SQLiteOpenHelper { public MySQLiteOpenHelper(Context c) { super(c, DB, null, DB_VERSION); } public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL(DROP_TABLE); onCreate(db); } } /** * 更新を行う(未完成) * @param parent * @param view * @param position * @param id */ private void update(AdapterView<?> parent, View view, int position, long id) { ListView listView = (ListView) parent; Cursor item = (Cursor)listView.getItemAtPosition(position); int lgin_id = item.getInt(item.getColumnIndex("_id")); String lgin_name = item.getString(item.getColumnIndex("data")); Log.d("ItemClick", "id="+lgin_id+", data=" + lgin_name); } }
●DataBaseActivity.java
/** * ListViewにおけるボタン要素のポジション取得アダプター * Created by r-aga on 2015/07/13. */ public class SimpleCursorBtnAdapter extends SimpleCursorAdapter { private int mButton; public SimpleCursorBtnAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int button) { super(context, layout, c, from, to); mButton = button; } public View getView(final int position, View convertView, final ViewGroup parent) { View view = super.getView(position, convertView, parent); Button btn = (Button) view.findViewById(mButton); btn.setTag(position); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg) { AdapterView.OnItemClickListener listener = list.getOnItemClickListener(); long id = getItemId(position); listener.onItemClick((AdapterView<?>) parent, arg, position, id); } }); return view; } }
不要な部分は削除したので、おかしなところがあるかもしれません。
ListViewにおいて、更新ボタンを押した時のpositionを作成するために、アダプターを自前で用意しています。
参考サイト
http://blogs.gine.jp/taka/archives/2966