そこで私は認可活動のためのコードを書こうとしています。 inputEmailにエントリを入力すると、対応するレコードが存在する場合、inputPaswordが自動的にファイリングされると思います。ただし、onItemSelectedListenerが機能していないようです。アイテムを選択しても何も起こりません。ログは燃えません。私が何か間違いをしたのか、間違ったアプローチをしているのか知りたいのですが。
AutoCompleteTextView inputEmail;
inputEmail = (AutoCompleteTextView) findViewById(R.id.loginEmail);
inputEmail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Set<String> keys = prefs.getAll().keySet();
emails.clear();
if (keys.size() != 0) {
emails.addAll(keys);
} else
emails.add("");
inputEmail.setAdapter(adapter);
email = inputEmail.getText().toString();
}
});
inputEmail.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
email = inputEmail.getText().toString();
password = prefs.getString(email, "");
Log.d(email + " "+password, "email+password");
if (password.length() > 1) {
inputPassword.setText(password);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
これはこれの複製です 質問
ただし、OnItemSelectedListenerではなく AdapterView.OnItemClickListener() を使用する必要があります。
次のコードスニペットを使用して、テストに成功しました。 Vogella のクレジットは、アダプターに関するものです。
AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.autocomplete_textview);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
"OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
"Android", "iPhone", "WindowsMobile" };
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < values.length; ++i) {
list.add(values[i]);
}
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
Android.R.layout.simple_list_item_1, list);
actv.setAdapter(adapter);
actv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(MainActivity.this,
adapter.getItem(position).toString(),
Toast.LENGTH_SHORT).show();
}
});
autoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedItem=autoCompleteTextView.getAdapter().getItem(position).toString();
Toast.makeText(getApplicationContext(),selectedItem , Toast.LENGTH_SHORT).show();
}
});
AutoCompleteTextViewのアダプターを取得し、位置を使用するだけです。
SetOnItemClickListenerを使用し、setOnItemSelectedListenerは使用しないでください。また、カスタムアダプターオブジェクトを使用して、選択した値をフェッチします。
prodNameAutoCompTxt.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
//Don't use this method
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
System.out.println("Nothing selected");
}
});
prodNameAutoCompTxt.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//Use this method
Product prodObj=(Product) prodAutoAdapter.getItem(i);
new UomSynch().execute(prodObj.getProdID());
}
});