質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

4105閲覧

androidでDB(SQLite)から取得したListViewデータのポジションをボタンクリックで取得したい

ryo_se

総合スコア68

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2015/07/13 07:21

andoroid開発初心者です。

現在DB(SQLite)から取得してきたデータ(文字列)をListViewにセットし、画面で表示させる部分を作りました。
そこで今度は取得してきたデータを編集し、更新ボタンをクリックしてデータ更新をしたいと思っています。
画面イメージとしては下記のようなイメージです。

id 文字 ボタン
3 バナナ 更新ボタン
2 りんご 更新ボタン
1 ぶどう 更新ボタン

ところが、更新ボタンを押したときに、そのポジションの値を取得するやり方がどうしてもわかりません。
ListViewのいずれかの要素をクリックした時の位置を取得するといったサンプルは山ほどあるのですが、
ListView内のボタンをクリックした時にそのポジション(または該当行の要素)の値を取得するにはどういった方法がございますでしょうか?

ご教授のほどお願いいたします。


http://www.adakoda.com/android/000077.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

各行のビューを構成するAdapterの中でButtonにクリックリスナを実装し,
その中で行を構成する元になるデータを使って処理すればいいのではないでしょうか?
各行の構成にはAdapterのgetViewを使っていると思うので,(扱う型を仮にItemとします)

lang

1public View getView(int position, View convertView, ViewGroup parent){ 2 final Item item = getItem(position); 3 /* 行を構成するためのXMLを読む等する そのViewを仮にcustomItemViewとする */ 4 Button button = (Button) customItemView.findViewById(R.id.button); 5 button.setOnClickListener(new View.OnClickListener(){ 6 @Override 7 public void onClick(View v){ 8 //ここでItemの更新など,Item絡みの操作を行わせる 9 } 10 }); 11}

これがダメなら,こちらを参考に→Android でボタンを入れた ListView を使う

投稿2015/07/13 07:44

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryo_se

2015/07/14 00:25 編集

ご返答ありがとうございます。 提示していただいたリンク先の情報からポジション情報を取得することができました。 ですがポジションからListViewの値(例えばEditText値等)を取得することができません・・。 下記のサイトでアダプターの情報をHashMapにセットする方法が記載されていたのですが、「android.database.sqlite.SQLiteCursor cannot be cast to java.util.HashMap」エラーがでてしまい取得できませんでした。試しにListViewクラスでも試しましたが同様の結果です。 http://stackoverflow.com/questions/14393334/how-to-get-object-value-from-listview-adapter-position [ソースコード] 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}; 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) {    Log.d("ItemClick", "Position=" + String.valueOf(position));   HashMap<String, Object> obj3 = (HashMap<String, Object>) myadapter.getItem(position);   HashMap<String, Object> obj4 = (HashMap<String, Object>) listview.getItemAtPosition(position);   String data1 = (String) obj3.get("data");   String data2 = (String) obj4.get("data");   Log.d("ItemClick", "data=" + data1);   Log.d("ItemClick", "data=" + data2);   } });
ryo_se

2015/07/14 00:53

すみません、自己解決しました。 SimpleCursorAdapterの場合はCusorを使用するんですね。 ありがとうございました。 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"));
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問