DialogのEditTextから入力した文字列を親ActivityのListViewに反映させるには

353 views
Skip to first unread message

はるか0606

unread,
Oct 17, 2013, 4:01:49 AM10/17/13
to android-g...@googlegroups.com
Dialogクラスを継承したカスタムダイアログにEditTextを配置し、そこに入力した
テキストを親Activityに配置したListViewに追加するアプリを作成中ですが、
Dialogを終了した直後にListViewにテキストが追加されません。
一旦HOMEに戻りってから再表示すると、入力したテキストがされています。

・ListViewの更新は、ActivityのonResume()で行っています。
・Adapterへの追加はActivityに実装したPublicメソッド内に実装し、
 DialogからListenerを介してdismiss()のタイミングで呼び出しています。

ログを埋め込んだところ、Dialog終了時にonResume()が呼び出されていませんでした。
Dialogの作成方法を変えずに意図する動作をさせるにはどうすればよいでしょうか。

katsuki nakatani

unread,
Oct 18, 2013, 4:35:45 AM10/18/13
to android-g...@googlegroups.com
こんにちは
中谷と申します。

Dialogのdismissでアイテムを追加されているのでしたら追加後にAdapterのnotifyDataSetChangedでデータが
更新されたことをAdapterに教えてあげればViewが更新されるかと思います。



2013年10月17日木曜日 17時01分49秒 UTC+9 はるか0606:

はるか0606

unread,
Oct 18, 2013, 8:20:45 AM10/18/13
to android-g...@googlegroups.com
中谷さん

アドバイスありがとうございました。
ご教授いただいた様にnotifyDataSetChanged()を追加
しましたが、結果は同じでした。
(dismiss()の呼び出しの前後どちらでも)

下記にプログラムコード(必要個所を抜粋)を転記します。

public class MainActivity extends Activity {
List<Data> objects = new ArrayList<Data>();
static DataAdapter dataAdapater = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.list_main);

ListView listView = (ListView)findViewById(R.id.list);
dataAdapater = new DataAdapter(this, 0, objects);
listView.setAdapter(dataAdapater);
}

// このメソッドをdismiss時に呼んでいる
public void addToList(String name) {
objects.add(item);
dataAdapater.notifyDataSetChanged();
}
}

katsuki nakatani

unread,
Oct 18, 2013, 12:58:28 PM10/18/13
to android-g...@googlegroups.com
こんばんは。
中谷です。

ほぼほぼ同じようなミニマムコードを書きました。
僕が書いたところ普通に期待通りの動作をしましたのでdismissが通っていないとか
ではないでしょうか。


public class MainActivity extends Activity {
List<String> mItems = new ArrayList<String>();
ArrayAdapter<String> mAdapter;
    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO 自動生成されたメソッド・スタブ
//テキスト入力を受け付けるビューを作成します。
   final EditText editView = new EditText(MainActivity.this);
   new AlertDialog.Builder(MainActivity.this)
       .setIcon(android.R.drawable.ic_dialog_info)
       .setTitle("テキスト入力ダイアログ")
       //setViewにてビューを設定します。
       .setView(editView)
       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int whichButton) {
              mItems.add(editView.getText().toString());
              mAdapter.notifyDataSetChanged();
           }
       })
       .setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int whichButton) {
           }
       })
       .show();
}
});

mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, mItems);
((ListView)findViewById(R.id.listView1)).setAdapter(mAdapter);

}

}

2013年10月18日金曜日 21時20分45秒 UTC+9 はるか0606:

pirai

unread,
Oct 18, 2013, 1:51:23 PM10/18/13
to android-g...@googlegroups.com
Dialog#dismiss()が呼ばれるまでの処理が書かれてないので、
本当にdismiss()が呼ばれてるか判断できませんが、
ArrayAdapterのメソッドを介したら勝手に反映されたと思いますが・・・。

>static DataAdapter dataAdapater = null;
DataAdapterって何ですか?オリジナルですか?

>objects.add(item);
このitemは何者ですか?
引数で受け取ったnameを入れたいのでは??
Message has been deleted

はるか0606

unread,
Oct 22, 2013, 1:41:25 AM10/22/13
to android-g...@googlegroups.com
pirai さま

引用して返信するやり方が分からないのでコピペして回答します。
(前回は何故かできたのですが今やったらできませんでした…)

>Dialog#dismiss()が呼ばれるまでの処理が書かれてないので、
>本当にdismiss()が呼ばれてるか判断できませんが、
タイミングはDialogに実装したButtonのonClickです。
同じメソッド内の「Adapterへの追加」は行われているので、
呼ばれている事を前提に話をしています。

>DataAdapterって何ですか?オリジナルですか?
はい、オリジナルです。実コードをそのまま載せるとどんなアプリなのか
類推されると思い、意図的に改名して記載しています。


>このitemは何者ですか?
>引数で受け取ったnameを入れたいのでは??
仰る通り誤記です。
実際はitemにnameを設定して追加しています。

以上です。

はるか0606

unread,
Oct 22, 2013, 1:44:32 AM10/22/13
to android-g...@googlegroups.com
中谷 さま

コードを拝見したところ、AlertDialogを使用されているようです。
ネットに出ている例は殆どがその方法のようだけど、今回使っているのは
Dialogクラスを継承しています。
両者では、dismissの実装方法に違いがあるのでしょうか。

以上です。

katsuki nakatani

unread,
Oct 22, 2013, 1:51:13 AM10/22/13
to android-g...@googlegroups.com
こんにちは
中谷です。

DialogでもAlertDialogでも今回の件はListの反映なので変わらないかなと思っていますが
もし確認されるのでしたら一度AlertDialogに変えて試されてはいかがでしょうか。

2013年10月22日火曜日 14時44分32秒 UTC+9 はるか0606:
Reply all
Reply to author
Forward
0 new messages