2013-11-27 2 views
0

Я пытаюсь создать диалоговое окно, содержащее 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); 

ответ

0

Edit: я понял мою проблему. Это было в строке, в которой экземпляр ArrayAdapter использовался для предложений автозаполнения. В аргументе ресурса вы можете видеть, что я сам сам определял сам AutoCompleteTextView, а не файл android.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); 
Смежные вопросы