我是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?
答案 0 :(得分:1)
我无法找到您输入文本的位置....从您需要的edittext接收文本
String myText=edittext.getText().toString()
实际上你只需要edittext.getText().toString()
但是你明白了......我相信你知道一旦你得到它就把它放在哪里。
然后将它用于你想要的任何目的......
如果你需要字符串中的Int,那么你也可以用Integer.parseInt(myText)
作为int。
答案 1 :(得分:1)
您需要向EditText
添加一个侦听器,以便在更改后检索其值。
只要{{1} {{1 }在您的主EditText
xml中声明,并分配了该id。
解决问题的最简单方法是将View
变量声明为主Layout
的实例属性。我们称之为EditText
并为其指定一个空的Layout
。
请注意,您实际上并不需要实例变量,您可能希望直接使用文本更改的值 - 它实际上归结为在使用搜索方法处理后是否需要重新使用它。在下面的示例中,我假设您在String
中声明并分配了实例Activity
变量theText
。
将监听器添加到String
中:
String
现在,一旦用户更改了文本,theText
的值将更新为该文本,您可以在代码中的其他位置使用它。
答案 2 :(得分:1)
从这一行开始,
EditText editText = (EditText) findViewById(R.id.enter_a_number);
你刚才有了一个视图,EditText视图。现在您需要获取用户已输入的数据。为此,请在此之后使用以下行
String eText=editText.getText().toString();
答案 3 :(得分:0)
使用edittext.getText().toString()
从EditText获取数据。它返回一个字符串,您可以将其存储在字符串变量中。
答案 4 :(得分:-1)
EditText edtemail;
String email;
...然后在oncreate方法中
edtemail=(EditText)findViewById(R.id.text_email);
email=edtemail.getText.toString();