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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1353閲覧

ListViewが表示されない

j06110611

総合スコア54

Java

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/02/28 13:30

やりたいこと

MakeQuizActivityで取得したtitle(文字列)をListViewに表示させたい。

現状

・デバッグでdataのすべての要素がnullということが分かった
(all elements are null)

試したこと

MainActivityにて、String型の変数testを作って、getStringExtraはできてるのかprintしたらできていた。
→String test = result.getStringExtra("INPUT_TITLE");
System.out.println(test);

MainActivity

1public class MainActivity extends AppCompatActivity { 2 3 private ArrayList data = new ArrayList<>(); 4 private static final int REQUEST_CODE = 1; 5 private ArrayAdapter adapter; 6 7 @Override 8 protected void onActivityResult(int request_Code, int resultCode, Intent result){ 9 switch(request_Code){ 10 //MakeQuizActivityから戻ってきた場合 11 case(REQUEST_CODE): 12 //クイズを作るボタンを押して戻ってきたときの処理 13 if(resultCode == RESULT_OK){ 14 setContentView(R.layout.activity_main); 15 //String test = result.getStringExtra("INPUT_TITLE"); 16 //System.out.println(test); 17 data.add(result.getStringExtra("INPUT_TITLE")); 18 adapter.notifyDataSetChanged(); 19 } 20 //押されなかったときの処理 21 else if(resultCode == RESULT_CANCELED){ 22 setContentView(R.layout.activity_main); 23 } 24 break; 25 } 26 } 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 setContentView(R.layout.activity_main); 30 31 // リスト項目とListViewを対応付けるArrayAdapterを用意する 32 adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);; 33 // ListViewにArrayAdapterを設定する 34 ListView listView = (ListView) findViewById(R.id.listView); 35 listView.setAdapter(adapter); 36 Button button = (Button) findViewById(R.id.makeQuiz_Button1); 37 button.setOnClickListener(new View.OnClickListener() { 38 @Override 39 public void onClick(View v) { 40 Intent intent = new Intent(MainActivity.this, com.test.quizmaker.MakeQuizActivity.class); 41 startActivityForResult(intent, REQUEST_CODE); 42 } 43 }); 44 } 45} 46

MakeQuizActivity

1public class MakeQuizActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_make_quiz); 7 8 Button button2 = (Button)findViewById(R.id.makeQuiz_Button2); 9 button2.setOnClickListener(new View.OnClickListener() { 10 @Override 11 public void onClick(View v) { 12 Intent intent = new Intent(MakeQuizActivity.this,com.test.quizmaker.MainActivity.class); 13 PreferenceManager pm = new PreferenceManager(); 14 SharedPreferences sp = getSharedPreferences("DataStore",MODE_PRIVATE); 15 SharedPreferences.Editor editor = sp.edit(); 16 pm.init(sp,editor); 17 String strTitle = ((EditText)findViewById(R.id.editText)).getText().toString(); 18 String strQuiz = ((EditText)findViewById(R.id.editText2)).getText().toString(); 19 String strAnswer = ((EditText)findViewById(R.id.editText3)).getText().toString(); 20 int count = sp.getInt("count",0) + 1; 21 pm.saveInt(count); 22 pm.saveString(strTitle, PreferenceManager.DataKeys.TITLE, String.valueOf(count)); 23 pm.saveString(strQuiz, PreferenceManager.DataKeys.QUIZ, String.valueOf(count)); 24 pm.saveString(strAnswer, PreferenceManager.DataKeys.ANSWER, String.valueOf(count)); 25 String title = sp.getString(PreferenceManager.DataKeys.TITLE.getValue() + String.valueOf(count), "Nothing"); 26 intent.putExtra("INPUT_TITLE", title); 27 setResult(RESULT_OK, intent); 28 finish(); 29 } 30 }); 31 } 32}

PreferenceManager

1public class PreferenceManager { 2 3 public SharedPreferences sp; 4 public SharedPreferences.Editor spEditor; 5 6 public enum DataKeys { 7 TITLE("title"), QUIZ("quiz"), ANSWER("answer"); 8 9 private String value; 10 11 private DataKeys(String value) { 12 this.value = value; 13 } 14 15 public String getValue() { 16 return this.value; 17 } 18 } 19 20 public void init(SharedPreferences sp, SharedPreferences.Editor editor) { 21 this.sp = sp; 22 this.spEditor = editor; 23 } 24 25 public void saveString(String s, DataKeys key, String c) { 26 spEditor.putString(key.getValue() + c, s); 27 spEditor.apply(); 28 } 29 30 public void saveInt(int c) { 31 spEditor.putInt("count", c); 32 spEditor.apply(); 33 } 34} 35

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

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

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

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

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

hoshi-takanori

2020/02/28 17:15

onActivityResult で setContentView する必要はないと思いますが。
jimbe

2020/02/28 18:13

といいますか, それが原因でしょうね.
j06110611

2020/02/29 13:52

でもsetContentViewしないと、画面が戻らずに落ちるんですけど、どうすればいいですか?
jimbe

2020/02/29 14:08

確認していませんが, setContentView によって ListView 等が新しく作られ, 表示されているモノは onCreate で Adapter を設定した ListView とは違うモノになっているのではないでしょうか. > 画面が戻らずに落ちるんですけど 落ちるとだけいわれましても...logcat に例外が出ていれば, ご質問に追加で全文をご提示ください.
j06110611

2020/03/02 22:21

解決しました! setContentViewによってListView等が新しく作られ・・・とありますが、Activity上にViewを表示させることができるものとしか考えてないのですがほかに役割?みたいなのがあるんですか?
jimbe

2020/03/03 00:43

> Activity上にViewを表示させることができるもの setContentView は, パラメータに View を指定した場合はその View を Activity に設定するメソッドですが, パラメータにレイアウトを指定した場合には, xml からの情報を元に View を生成して Activity に設定しているということになります.
guest

回答1

0

自己解決

onActivityResultにsetContentViewを書いていたのが原因でした。

投稿2020/03/02 22:59

j06110611

総合スコア54

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問