前提・実現したいこと
MACアドレスを登録するためのActivityを作成中です。
EditTextに入力した文字列に2桁区切りで:を挿入して、SharedPreferencesに保存したいのですが上手くいきません。どなたかご教授いただければ幸いです。
また、EditTextに文字を入力する際に、2桁入力されるごとに記号を挿入する方法があればそちらもよろしくお願いいたします。
該当のソースコード
Java
1import android.annotation.SuppressLint; 2import android.app.AlertDialog; 3import android.content.DialogInterface; 4import android.content.Intent; 5import android.content.SharedPreferences; 6import android.os.Build; 7import android.os.Bundle; 8import android.text.InputFilter; 9import android.text.InputType; 10import android.text.Spanned; 11import android.view.Gravity; 12import android.view.View; 13import android.widget.Button; 14import android.widget.EditText; 15import android.widget.TextView; 16import android.widget.Toast; 17 18import androidx.annotation.RequiresApi; 19import androidx.appcompat.app.AppCompatActivity; 20 21import java.util.Locale; 22import java.util.Objects; 23 24public class PrefActivity extends AppCompatActivity { 25 26 private SharedPreferences dataStore; 27 private EditText editText; 28 private TextView textWrite, textRead; 29 30 @SuppressLint("WrongConstant") 31 @Override 32 protected void onCreate(Bundle savedInstanceState) { 33 super.onCreate(savedInstanceState); 34 setContentView(R.layout.activity_pref); 35 36 // "DataStorage"という名前でインスタンスを生成 37 dataStore = getSharedPreferences("DataStorage", MODE_APPEND); 38 39 editText = findViewById(R.id.edit_text); 40 InputFilter[] myFilters = {alphabetFilter, new InputFilter.LengthFilter(17)}; // 大文字+アルファベットフィルタ+長さフィルタ 41 editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); 42 editText.setFilters(myFilters); 43 44 //保存ボタン 45 textWrite = findViewById(R.id.text_write); 46 //呼び出しボタン 47 textRead = findViewById(R.id.text_read); 48 49 Button btnBack = findViewById(R.id.back); 50 if (btnBack != null) { 51 btnBack.setOnClickListener(new View.OnClickListener() { 52 @Override 53 public void onClick(View v) { 54 BackClickEvent(); 55 } 56 }); 57 } 58 59 Button buttonWrite = findViewById(R.id.button_write); 60 buttonWrite.setOnClickListener(new View.OnClickListener() { 61 @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD) 62 @Override 63 public void onClick(View v) { 64 AlertDialog confirmDialog = new AlertDialog.Builder(PrefActivity.this) 65 .setTitle(getString(R.string.mac_register)) 66 .setCancelable(false) 67 .setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() { 68 @Override 69 public void onClick(DialogInterface dialogInterface, int i) { 70 71 // エディットテキストのテキストを取得 72 String text = editText.getText().toString(); 73 textWrite.setText(text); 74 75 // 入力文字列を"input"に書き込む 76 SharedPreferences.Editor editor = dataStore.edit(); 77 editor.putString("input", text); 78 79 // editor.commit(); 80 editor.apply(); 81 Toast.makeText(getApplicationContext(), "完了", Gravity.CENTER).show(); 82 } 83 }) 84 .setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() { 85 @Override 86 public void onClick(DialogInterface dialogInterface, int i) { 87 88 } 89 }) 90 .create(); 91 confirmDialog.show(); 92 } 93 }); 94 95 Button buttonRead = findViewById(R.id.button_read); 96 buttonRead.setOnClickListener(new View.OnClickListener() { 97 @Override 98 public void onClick(View v) { 99 // "input"から読み出す、何もないときは"Nothing"を返す 100 String data = dataStore.getString("input", "Nothing"); 101 if (!Objects.requireNonNull(data).equals("Nothing")) { 102 textRead.setText(data); 103 } 104 } 105 }); 106 } 107 108 // アルファベットフィルタ a-z→A-z 109 private InputFilter alphabetFilter = new InputFilter() { 110 @Override 111 public CharSequence filter(CharSequence source, int start, int end, 112 Spanned dest, int dstart, int dend) { 113 if (source.toString().matches("^[a-zA-Z 0-9 :]+$")) { 114 return source.toString().toUpperCase(Locale.ROOT); 115 } else { 116 return ""; 117 } 118 } 119 }; 120 121 private void BackClickEvent() { 122 Intent intent = new Intent(getApplication(), ConfigActivity.class); 123 startActivity(intent); 124 } 125}
試したこと
String.formatを用いてtextの内容を加工出来ないかと考えましたができませんでした。
// エディットテキストのテキストを取得 String text = editText.getText().toString(); // 入力文字列に2文字区切りで:を挿入 String str = String.format("%:2d", text); System.out.println(str); textWrite.setText(str); // 入力文字列を"input"に書き込む SharedPreferences.Editor editor = dataStore.edit(); editor.putString("input", str); // editor.commit(); editor.apply(); Toast.makeText(getApplicationContext(), "完了", Gravity.CENTER).show(); }
回答1件
あなたの回答
tips
プレビュー