我autocompletetextview,我想只有那些文字是在这里,我所有的名字存储和自动建议显示我的原料资源文本文件列表 如果用户尝试进入其他不同文本比上市然后再验证表明:“选定的名称只接受”Autocompletetextview只能从下拉菜单中选择文本向下上市
public class MainActivity extends AppCompatActivity {
Button submit;
TextView timerInfo;
TextView timertext;
SharedPreferences pref;
CountDownTimer countDownTimer;
Scanner scanner;
ArrayList<String> list;
ArrayAdapter<String> adapter;
AutoCompleteTextView autolist;
AccessibilityService.SoftKeyboardController keyboardController;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
scanner= new Scanner(getResources().openRawResource(R.raw.names)).useDelimiter("\n");
list=new ArrayList<>();
getList();
autolist=(AutoCompleteTextView) findViewById(R.id.list_names);
autolist.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus && v.getId()==R.id.list_names){
autolist.setCursorVisible(true);
populate();
}
else{
((AutoCompleteTextView)v).performValidation();
autolist.setCursorVisible(false);
}
}
});
autolist.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
autolist.setCursorVisible(true);
}
});
autolist.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
autolist.setCursorVisible(false);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(autolist.getWindowToken(), 0);
return true;
}
return false;
}
});
pref=getSharedPreferences("AppClose",MODE_PRIVATE);
String abc=pref.getString("demover","");
if(abc=="demover"){
finish();
}
submit=(Button) findViewById(R.id.timerStart);
timerInfo=(TextView) findViewById(R.id.timerInfo);
timertext=(TextView) findViewById(R.id.timertxt);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timertext.setText("Time Left :");
submit.setVisibility(View.INVISIBLE);
countDownTimer=new CountDownTimer(30000,1000){
@Override
public void onTick(long millisUntilFinished) {
timerInfo.setText(String.valueOf((int) (millisUntilFinished/1000)));
}
@Override
public void onFinish() {
pref.edit().putString("demover","demover").apply();
finish();
}
}.start();
}
});
autolist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
isSelectedText = true;
}
});
autolist.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
isSelectedText = false;
}
@Override
public void afterTextChanged(Editable editable) {
if(isSelectedText){
Toast.makeText(MainActivity.this, "nice", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.this, "not nice", Toast.LENGTH_SHORT).show();
}
}
});
}
class Validator implements AutoCompleteTextView.Validator {
@Override
public boolean isValid(CharSequence text) {
Log.v("Test", "Checking if valid: "+ text);
Arrays.sort(new InputStream[]{getResources().openRawResource(R.raw.names)});
if (Arrays.binarySearch(new InputStream[]{getResources().openRawResource(R.raw.names)}, text.toString()) > 0) {
return true;
}
return false;
}
@Override
public CharSequence fixText(CharSequence invalidText) {
Toast.makeText(MainActivity.this, "Fixed", Toast.LENGTH_SHORT).show();
/* I'm just returning an empty string here, so the field will be blanked,
* but you could put any kind of action here, like popping up a dialog?
*
* Whatever value you return here must be in the list of valid words.
*/
return "Digger";
}
}
public void getList(){
try{
while(scanner.hasNextLine()){
list.add(scanner.next());
}
}catch (Exception e){e.printStackTrace();}
}
public void populate(){
adapter = new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,list);
autolist.setAdapter(adapter);
}
}
我已经使用上somel调试并显示暂停线程。
我想要什么:采取只有那些文字输入,在自动建议
会不会有任何冲突假设您选择从下拉项下好了,现在你要改变,从列表中选择另一个项目,以便onTextChanged会叫始终即使你选择从建议的文字仍然会是假的isSelectedText将假 – SamH67
改变文本>假>选择项目>真。因此,没有可能的冲突 –
完美谢谢:) – SamH67