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

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

ただいまの
回答率

90.37%

  • Java

    15109questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6988questions

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

subActivityから受け取ったtextをlistviewに追加する方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 775

yusuke_00

score 14

前提・実現したいこと

他画面から、受け取ったtextをlistviewに追加したいのですが、出来ません。
他画面で入力して、listviewにsetされてしまい、次また、他画面からメインにデータを送ると、先ほどのデータの上に書かれてしまい?追加されてないです。

追加し続けるには、どうしたら、良いでしょうか?

発生している問題・エラーメッセージ

該当のソースコード

public class MainActivity extends AppCompatActivity {
    private ArrayList<String> listToDo;
    private ArrayAdapter<String> arrayToDo;
    private TextView text = null;
    private static final int SUB_ACTIVITY = 1001;

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


        Button btn = (Button) findViewById(R.id.btnSend);
        //text = (TextView) findViewById(R.id.txtEdit);
        assert btn != null;
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);

                startActivityForResult(intent, SUB_ACTIVITY);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1);
        ListView list = (ListView) findViewById(R.id.listView);
        list.setAdapter(adapter);

        adapter.add(data.getCharSequenceExtra("text"));


    }
}

試したこと

補足情報(言語/FW/ツール等のバージョンなど)

androidStudio

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

結果を受け取るたびにリストを初期化していることが原因ですね。
下記の処理はActivity#onCreateで一度だけ行うだけで良いと思います。

ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1); 
ListView list = (ListView) findViewById(R.id.listView); 
list.setAdapter(adapter);

また、コードはコード専用の記述方法があるので修正してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/11 22:52

    凄いお方から、レスが返って来て驚いてるところです。
    onActivityResultにはどのように書けばよいでしょうか?
    ずっと、悩んでいたので、非常に助かります。

    キャンセル

  • 2016/06/11 23:04

    1-adapterをフィールド変数にする。
    2-onCreateで回答の処理を行う。
    3-onActivityResultでAdapter#addだけを行う。

    キャンセル

  • 2016/06/11 23:24

    フィールド
    private ArrayAdapter<CharSequence> adapter;

    onCreateに
    先ほどの三行

    onActivityResultに
    adapter.add(data.getCharSequenceExtra("text"));

    で実行しますと、

    私の書き方が間違ってると思うのですが、、、、、
    ArrayAdapter.add(java.lang.Object) on a null object referenceで、エラーが出てしまいます。
    よろしくお願いします。

    キャンセル

  • 2016/06/11 23:32

    ArrayAdapterのコンストラクタでListを引数に取るものでインスタンス化してください。
    そのときListはnullではなく、空のArrayListを渡してください。

    キャンセル

  • 2016/06/11 23:53

    ごめんなさい。sampleで書いてもらえないでしょうか、、、
    わかりません。

    キャンセル

  • 2016/06/11 23:58

    teratailはやってもらうサービスではなく、わからないところを教えてもらうサービスです。
    あなたは理解しようとする努力をしましたか、コードを少しでも書きましたか。
    具体的に何がわからないのですか?

    キャンセル

  • 2016/06/12 00:02

    ArrayAdapterのコンストラクタがまず、どこにあるのかわかってません。
    これを書けばこれが出来て、これにはこれが必要とか、これを渡す。など、はわかるのですが、書いていて、これがコンストラクタで、これがオブジェクト、これがインスタンスなど正直わかってません。
    ArrayAdapterのコンストラクタはonCreateにあります、
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1);
    の事で良いのでしょうか?
    インスタンス化っていうのも、よくわかってません。

    キャンセル

  • 2016/06/12 00:09

    クラスの使い方がわからない場合はリファレンスを読みましょう。
    https://developer.android.com/reference/android/widget/ArrayAdapter.html?hl=ja

    また、Javaの基礎を理解していないようです。今後のためにも、応用をする前に基礎をやるべきです。

    キャンセル

  • 2016/06/12 00:37

    基礎がやっぱり出来てないですよね。。でも、やらなくてはいけないので、かれこれ3日か、4日全く寝ずにこれをやっていますが、全然わかりません。それのせいか、頭の回転もかなり落ちてる気がします。期限が決まっており、基礎を学ぶことを飛ばしてしまいました。

    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1);
    こちらのオブジェクトの引数に
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_1,ArrayList);

    と、いうことでよろしいでしょうか。

    これを終えましたら、もちろん、しっかり、基礎からやろうと思ってます。
    勝手ながらも、少しお付き合いお願いできますでしょうか。

    キャンセル

  • 2016/06/12 00:43 編集

    下記のようにしてください。
    new ArrayAdapter<CharSequence>(this,android.R.layout.simple_list_item_1,new ArrayList<>());

    キャンセル

  • 2016/06/12 02:10

    甘えてしまってすみません。
    new ArrayAdapter<CharSequence>(this,android.R.layout.simple_expandable_list_item_1,new ArrayList<>());
    だと、赤線が出てしまったので、<CharSequence>を入れるのかなと思い、赤線が消えたので、実行したのですが、やはり、同じエラーが出てしまいました。
    subActivityから、データを受け取って、onActivityResultにて、フィールド変数で宣言したadapterにadd。それからonCreateで
    new ArrayAdapter<CharSequence>(this,android.R.layout.simple_expandable_list_item_1,new ArrayList<CharSequence>());
    ListView list = (ListView) findViewById(R.id.listView)
    list.setAdapter(adapter);
    でListViewに渡すオブジェクトを作り、listを定義?して、setAdapterメソッドを使い、追加するのですが、ArrayAdapterで空の引数ArrayListを渡すには、どういった意味があるのですか?

    キャンセル

0

操作する対象を勘違いしているような気がしますね。
現状、onActivityResultで新規作成したArrayAdapterをListViewにセットし、そのAdapterに要素を入れているので、何回繰り返しても要素が一個しか入りません。ListViewにセットしている段階で、その前にセットされていたAdapterが破棄されているので。
そうならないために、フィールド変数でlistToDoarrayToDoを用意しているのではないですか?
やるべきことは、
1.このActivityのonCreateでlistToDoarrayToDoを作成、ListViewへのAdapter設定もここで済ませる

// onCreate内
listToDo = new ArrayList<String>();
arrayToDo = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listToDo);
ListView list = (ListView) findViewById(R.id.listView);
list.setAdapter(adapter);


2.onActivityResultでは、受け取った文字列をAdapterに追加するだけにする。
その対象は1.で作成したarrayToDo

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        arrayToDo.add(data.getCharSequenceExtra("text"));
    }

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/06/12 03:06

    夜遅くに、回答ありがとうございます。
    listToDo = new ArrayList<String>();
    arrayToDo = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listToDo);
    この2行が、何をしてるのかよくわからないので、教えてもらえないでしょうか。
    2つの型を<CharSequence>にして、
    list.setAdapter(arrayToDo)にした所、無事、成功しました。非常に助かります。

    キャンセル

  • 2016/06/12 03:11

    listToDo,arrayToDoは、変数の宣言はしましたが実体がない状態です。その実体を新たに作る作業です。

    キャンセル

  • 2016/06/12 03:19

    理解しました。わかりやすい回答ありがとうございます。

    キャンセル

同じタグがついた質問を見る

  • Java

    15109questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6988questions

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