Я пытаюсь создать диалоговое окно, содержащее AutoCompleteTextView, чтобы предлагать пользователю вводить информацию. В то время как большинство из них работает, когда автозаполнение представляет правильные предложения, загруженные из базы данных, при нажатии на предложения ничего не происходит, и поле «Текст» не заполняется предложением автозаполнения. При нажатии на предложения курсор появляется, как будто для редактирования самих предложений, хотя и ничего не делает. Я запускаю это на устройстве версии 4.3, поэтому я не думаю, что это проблема.Android: предложения AutoCompleteTextView не могут быть изменены внутри диалогового окна
Java-код для реализации Диалог оповещения здесь:
public class MainActivity extends Activity {
public static final String PREFS_NAME = "ChosenGroupName";
public final static String EXTRA_MESSAGE = "com.example.tperm.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
final SharedPreferences settings = getSharedPreferences(PREFS_NAME,0);
final String previousGroupName = settings.getString("groupName", "No Group Specified");
final SharedPreferences.Editor prefseditor = settings.edit();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final SamplesDataSource mSamplesDataSource = new SamplesDataSource(
this);
mSamplesDataSource.open();
mSamplesDataSource.addGroupNameifUnique("No Group Specified");
List<String> groupNames = mSamplesDataSource.getAllGroupNames(true);
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.group_name_dialog);
dialog.setTitle("Please Enter a Group Name for the Samples");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(builder.getContext(),R.layout.group_name_dialog,R.id.group_name_autocomplete,groupNames);
LayoutInflater inflater = this.getLayoutInflater();
View v = inflater.inflate(R.layout.group_name_dialog,null);
final AutoCompleteTextView groupNameAutocomplete = (AutoCompleteTextView) v.findViewById(R.id.group_name_autocomplete);
groupNameAutocomplete.setAdapter(adapter);
groupNameAutocomplete.setThreshold(1);
groupNameAutocomplete.setPadding(0, 100, 100, 0);
builder.setView(v)
.setNegativeButton("Enter", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int id){
if(groupNameAutocomplete.getText()!=null){
String chosenGroupName = groupNameAutocomplete.getText().toString();
prefseditor.putString("groupName", chosenGroupName);
prefseditor.commit();
mSamplesDataSource.addGroupNameifUnique(chosenGroupName);
dialog.dismiss();
Toast.makeText(getApplicationContext(), "Group Name is: "+ chosenGroupName +
". You may change this by going into the settings menu.",Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(getApplicationContext(), "No group name selected, you may use the last group name used for this system" +
" by selecting the \"use last group name\" button",Toast.LENGTH_LONG).show();
}
}
})
.setPositiveButton("Use Last Group name", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(getApplicationContext(), "Group Name is: "+ previousGroupName +
". You may change this by going into the settings menu.",Toast.LENGTH_LONG).show();
dialog.dismiss();// We will be getting the group name string from the prefs
//and we already loaded the last group name.
}
});
builder.show();
}
код XML для пользовательского зрения Диалог выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<AutoCompleteTextView
android:id="@+id/group_name_autocomplete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:ems="10"
android:hint="Group Name" >
</AutoCompleteTextView>
</RelativeLayout>
Edit: я понял мою проблему. Это было в строке, в которой экземпляр ArrayAdapter использовался для предложений автозаполнения. В аргументе ресурса вы можете видеть, что я сам определял сам AutoCompleteTextView, а не ndroid.R.layout.simple_dropdown_item_1line, как и должно быть.
Правильная линия будет выглядеть следующим образом:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(builder.getContext(),android.R.layout.simple_dropdown_item_1line,R.id.group_name_autocomplete,groupNames);