私はAndroidプログラミングが初めてなので、ご容赦ください。これは私の最初のアプリです。その目的は、ユーザーが検索ウィジェットに入力した文字列を、sd カードに配置された txt で検索することです。ほぼ完成しましたが、最後の目標は、ユーザーが検索後に得たい回答の数を決定できる機能を追加することでした。そこで、数値を入力できる EditText フィールドを追加しました。それが私の問題です: EditText フィールドに入力したデータを取得できません。理由がわかりません。これは私の onCreate です。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.enter_a_number); // I think this is the firs part of my problem...
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
int number = Integer.valueOf(editText.getText().toString()); // ...and that is the second
do_my_search(query, number);
}
}
および do_my_search メソッド:
public void do_my_search(String query, int number) {
//Find the directory for the SD Card using the API
File sdcard = Environment.getExternalStorageDirectory();
//Get the text file
File file = new File(sdcard,"fragment.txt");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "windows-1250"),8192);
String line;
String[] text = new String[5];
int i = 0;
TextView textView1 = (TextView)findViewById(R.id.textView1);
textView1.setMovementMethod(new ScrollingMovementMethod());
while ((line = br.readLine()) != null) {
if(line.toLowerCase().contains(query.toLowerCase()) == true && i < number){
text[i] = i + 1 + "." + line + "\n";
i++;
}
}
for(i = 0; i < number ; i ++){
if(text[i] == null)
text[i] = "";
}
StringBuilder builder = new StringBuilder();
for (String value : text) {
builder.append(value);
}
String final_string = builder.toString();
Spannable wordtoSpan = new SpannableString(final_string);
for(i = 0;; ){
int k = final_string.indexOf(query,i);
if (k == -1)
break;
wordtoSpan.setSpan(new ForegroundColorSpan(Color.RED), k, k + query.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
i = k + query.length();
}
textView1.setText(wordtoSpan);
br.close();
}
catch (IOException e) {
//You'll need to add proper error handling here
}
}
テキストフィールド以外はすべて正常に機能します。私はいくつかの同様のスレッドを閲覧しましたが、私の問題は、フィールドに何かを入力する前に変数番号が値を取得することだと思います。何か違うものを表示していても、常にデフォルトのテキストが選択されます。おそらくコードにエラーが発生することはわかっていますが、現在、この特定の問題を解決することに興味があります: edittext フィールドに入力した値を変数番号に選択させるにはどうすればよいですか? ボタンやTextWatcherを追加しなくても可能ですか?