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

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

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

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

Android Studio

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

Q&A

0回答

1240閲覧

ListViewで選択した項目の場所に対応しmapを削除したい。

j06110611

総合スコア54

Java

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

Android Studio

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

0グッド

0クリップ

投稿2020/06/07 02:36

編集2020/06/08 02:57

現状

選択された項目数でmapが順に削除されてしまう。
そうではなく、選択された項目の場所に対応させてmapを削除したい。
titleList等とmap等は要素・要素数も同じようになっており、mapは値からキー名を取得し、SharedPreferenceの保存データから削除するために使っている。
checked.keyAt(i)は書けないっぽい

MainActivity

1public boolean onOptionsItemSelected(MenuItem menuItem) { 2 //押されたメニューのIDで処理を振り分ける 3 //if(menuItem.getItemId() == R.id.menuClear){ 4 switch (menuItem.getItemId()) { 5 case R.id.menuSelect: 6 //マップの情報を取得する 7 SparseBooleanArray checked = listView.getCheckedItemPositions(); 8 9 for (int i = 0; i <= checked.size(); i++) { 10 if (checked.valueAt(i)) { 11 for (Map.Entry<String, String> entry : MakeQuizActivity.mapTitle.entrySet()) { 12 if (entry.getValue().equals(titleList.get(checked.keyAt(i)))) { 13 Log.v("Debug", "キーを取得" + entry.getKey()); 14 adapter.remove(titleList.get(checked.keyAt(i))); 15 PreferenceManager.remove(entry.getKey()); 16 } 17 } 18 adapter.notifyDataSetChanged(); 19 } 20 for (Map.Entry<String, String> entry : MakeQuizActivity.mapQuiz.entrySet()) { 21 if (entry.getValue().equals(quizList.get(checked.keyAt(i)))) { 22 Log.v("Debug", "キーを取得" + entry.getKey()); 23 PreferenceManager.remove(entry.getKey()); 24 } 25 } 26 for (Map.Entry<String, String> entry : MakeQuizActivity.mapAnswer.entrySet()) { 27 if (entry.getValue().equals(answerList.get(checked.keyAt(i)))) { 28 Log.v("Debug", "キーを取得" + entry.getKey()); 29 PreferenceManager.remove(entry.getKey()); 30 } 31 } 32 } 33 break;

コード

MakeQuizActivity

1public class MakeQuizActivity extends AppCompatActivity { 2 public static Map<String,String> mapTitle = new HashMap<>(); 3 public static Map<String,String> mapQuiz = new HashMap<>(); 4 public static Map<String,String> mapAnswer = new HashMap<>(); 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_make_quiz); 10 setTitle("クイズ作成"); 11 12 Button button2 = (Button)findViewById(R.id.makeQuiz_Button2); 13 button2.setOnClickListener(new View.OnClickListener() { 14 @Override 15 public void onClick(View v) { 16 Intent intent = new Intent(MakeQuizActivity.this,com.test.quizmaker.MainActivity.class); 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 PreferenceManager.saveInt(MainActivity.count); 21 PreferenceManager.saveString(strTitle, DataKeys.TITLE, String.valueOf(MainActivity.count)); 22 //MainActivity.titleList.add(strTitle); 23 mapTitle.put(DataKeys.TITLE.getValue() + String.valueOf(MainActivity.count),strTitle); 24 PreferenceManager.saveString(strQuiz, DataKeys.QUIZ, String.valueOf(MainActivity.count)); 25 //MainActivity.quizList.add(strQuiz); 26 mapQuiz.put(DataKeys.QUIZ.getValue() + String.valueOf(MainActivity.count),strQuiz); 27 PreferenceManager.saveString(strAnswer, DataKeys.ANSWER, String.valueOf(MainActivity.count)); 28 //MainActivity.answerList.add(strAnswer); 29 mapAnswer.put(DataKeys.ANSWER.getValue() + String.valueOf(MainActivity.count),strAnswer); 30 setResult(RESULT_OK, intent); 31 finish(); 32 } 33 }); 34 } 35} 36

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

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

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

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

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

hoshi-takanori

2020/06/07 19:46

MakeQuizActivity のソースコード (特に mapTitle, mapQuiz, mapAnswer を定義・操作しているところ) も貼ってもらえませんか?
j06110611

2020/06/08 02:57

編集しました!
hoshi-takanori

2020/06/08 22:20

あー、やっぱり static なんですね…。そして、MainActivity が持つ ArrayList と MakeQuizActivity の HashMap で二重管理されてますが、これらがどういう関係になってるか理解できてますか?
j06110611

2020/06/09 04:02

うーん、あまり理解出来てないかもです。
hoshi-takanori

2020/06/09 05:17

まず static 変数を使うのはよくないです。特に、Activity 間のデータのやり取りはちゃんと Intent を使うべき。そして、Map は順番が保証されない (要素を削除すると全体の順番が変わる可能性もある) ので、ListView の表示には List を使うべきでしょうね。(List にキーだけ保存して、キーに対応する値は Map から取得する、という使い方ならありです。)
j06110611

2020/06/09 06:12

なるほど、丁寧にありがとうございます。
j06110611

2020/06/09 06:25

ちなみにListViewの表示にListは使ってます。データの保存にSharedPreferencesを使ってたため、SharedPreferenceのデータを削除するには、キー名で指定しないといけなかったので、わざわざ、ListViewの選択された項目の値からキー名を取得し、削除しておりました。SharedPreferencesでやるものではないなと思ってますw
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問