表示中のListViewの任意の1行のデータのみを入れ替える方法

1,624 views
Skip to first unread message

Jack

unread,
Aug 19, 2010, 5:20:52 AM8/19/10
to 日本Androidの会
どなたかご存知でしたら教えてください。

画面構成としてテキスト項目があり、そのすぐ下にListViewがあります。

実現したい動作は下記のようなことです。
ListViewの任意の1行をタッチするとテキスト項目に表示されます。
テキスト内容を変更して例えばボタンを押すとタッチしたListView の任意の1行に変更したテキスト内容が
表示されるという仕組みです。

AdapterやListViewのメソッドを探しても中々それらしいものがなく、また
頭から再表示でもよいのですが、できそうなメソッドは、サポートしていないと書いてあるし、困っています。


どなたか良い方法ご存知でしたら教えて頂けないでしょうか。


夜子まま

unread,
Aug 19, 2010, 6:11:08 AM8/19/10
to android-g...@googlegroups.com
夜子ままです

WindowsのListBoxをイメージしているのだとおもうのですが、
あれと同じ機能のものはないので以下のように組み合わせて

<LinearLayout android:id="@+id/LinearLayout01"
android:orientation="vertical"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<EditText 
android:id="@+id/EditText01"
android:text="@+id/EditText01"
android:layout_width="fill_parent" android:layout_height="wrap_content" />
<ListView
android:id="@+id/ListView01" 
android:layout_weight="1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>

希望の振る舞いは、各種リスナーでやってあげないといけないです。

2010年8月19日18:20 Jack <jzl0...@nifty.com>:


--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Jack

unread,
Aug 19, 2010, 6:15:24 AM8/19/10
to 日本Androidの会
自己レスで済みません。

参考になればと思い、記載します。

下記の方法で出来ました。

//入れ替えたい行を取得
String adt = adapter.getItem(up_count);
//入れ替える行をクリア
adapter.remove(adt);
//入れ替えたいデータを設定
adt = "入れ替えデータ";
//入れ替え
adapter.insert(adt,up_count);

removeが必要かは、まだテストしていませんが、とりあえずアップします。

お騒がせして済みませんでした。

Jack

unread,
Aug 19, 2010, 8:09:20 PM8/19/10
to 日本Androidの会
夜子まま様

ご返答ありがとうございます。
Layoutはご記載の内容にほぼ一致しています。

ListViewに表示後の任意の1行を更新したく質問をアップしていました。
AndroidReferenceを何とかにらめっこして解決しました。


On 8月19日, 午後7:11, 夜子まま <hijirinhiji...@gmail.com> wrote:
> 夜子ままです
>
> WindowsのListBoxをイメージしているのだとおもうのですが、
> あれと同じ機能のものはないので以下のように組み合わせて
>
> <LinearLayout android:id="@+id/LinearLayout01"
> android:orientation="vertical"
> android:layout_width="wrap_content" android:layout_height="wrap_content">
> <EditText
> android:id="@+id/EditText01"
> android:text="@+id/EditText01"
> android:layout_width="fill_parent" android:layout_height="wrap_content" />
> <ListView
> android:id="@+id/ListView01"
> android:layout_weight="1"
> android:layout_width="fill_parent"
> android:layout_height="wrap_content" />
> </LinearLayout>
>
> 希望の振る舞いは、各種リスナーでやってあげないといけないです。
>
> 2010年8月19日18:20 Jack <jzl03...@nifty.com>:
>
>
>
> > どなたかご存知でしたら教えてください。
>
> > 画面構成としてテキスト項目があり、そのすぐ下にListViewがあります。
>
> > 実現したい動作は下記のようなことです。
> > ListViewの任意の1行をタッチするとテキスト項目に表示されます。
> > テキスト内容を変更して例えばボタンを押すとタッチしたListView の任意の1行に変更したテキスト内容が
> > 表示されるという仕組みです。
>
> > AdapterやListViewのメソッドを探しても中々それらしいものがなく、また
> > 頭から再表示でもよいのですが、できそうなメソッドは、サポートしていないと書いてあるし、困っています。
>
> > どなたか良い方法ご存知でしたら教えて頂けないでしょうか。
>
> > --
> > このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> > このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> > このグループから退会するには、android-group-j...@googlegroups.com<android-gro-up-japan%2Bunsu...@googlegroups.com>にメールを送信してください。
> > 詳細については、http://groups.google.com/group/android-group-japan?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

mosaki4

unread,
Aug 21, 2010, 1:57:46 AM8/21/10
to android-g...@googlegroups.com
大崎といいます

解決したようですが、解決方法が書いていないようなので
自分が実現できた方法を記述しておきます。

ArrayAdapterを利用して下記のように設定した場合

private String[] data = {"Apple", "Lemon", "Orange", "Strawberry"};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);

単純にデータが入っている配列の内容を書き換えて
notifyDataSetChangedメソッドを呼ぶことで
ListViewに表示後に任意の1行を更新できます。

EditText t = (EditText)findViewById(R.id.EditText01);
data[mPosition] = t.getText().toString();
adapter.notifyDataSetChanged();


2010年8月20日9:09 Jack <jzl0...@nifty.com>:

Jack

unread,
Aug 21, 2010, 3:28:32 AM8/21/10
to 日本Androidの会
大崎様

ご助言ありがとうございます。
notifyDataSetChangedは、referenceで見ていたのですが、
私のコードが悪いのかご記載の下記ののコードでは2行目で例外が起きていたので仕方なく
任意の行をremove、insertという回りくどい方法で回避しました。


> EditText t = (EditText)findViewById(R.id.EditText01);
> data[mPosition] = t.getText().toString();
> adapter.notifyDataSetChanged();

これからもご助言宜しくお願いします。

On 8月21日, 午後2:57, mosaki4 <mosa...@gmail.com> wrote:
> 大崎といいます
>
> 解決したようですが、解決方法が書いていないようなので
> 自分が実現できた方法を記述しておきます。
>
> ArrayAdapterを利用して下記のように設定した場合
>
> private String[] data = {"Apple", "Lemon", "Orange", "Strawberry"};
> adapter = new ArrayAdapter<String>(this,
> android.R.layout.simple_list_item_1, data);
>
> 単純にデータが入っている配列の内容を書き換えて
> notifyDataSetChangedメソッドを呼ぶことで
> ListViewに表示後に任意の1行を更新できます。
>
> EditText t = (EditText)findViewById(R.id.EditText01);
> data[mPosition] = t.getText().toString();
> adapter.notifyDataSetChanged();
>
> 2010年8月20日9:09 Jack <jzl03...@nifty.com>:
> > <android-gro-up-japan%2Bunsu...@googlegroups.com<android-gro-up-japan%2-52Buns...@googlegroups.com>
Reply all
Reply to author
Forward
0 new messages