2016-05-18 11 views
1

Ich habe eine AutoVervollständigen Textansicht implementiert.Ich habe es so konfiguriert, dass jedes Mal, wenn ich AutoVervollständigen Textansicht klicken ich die Vorschläge zeigen.Alles funktioniert gut, außer dass die Vorschläge nicht nach aktualisiert werden ich habe etwas von der list.Here ausgewählt ist mein Code:Update Vorschläge für AutoVervollständigen Textansicht Element klicken

arrayAdapter = new ArrayAdapter<>(
      HomeActivity.this, android.R.layout.simple_dropdown_item_1line, array); 

    textView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTV); 
    textView.setAdapter(arrayAdapter); 
    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View arg0) { 

      textView.showDropDown(); 

     } 
    }); 
    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      arrayAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

Zum Beispiel, wenn ich String Array wie { "a", "abvc", "ajedghed", "b", "bdvhd", " bwgdydg "," c "," cswjwwd "} Und ich tippe b, es zeigt alle relevanten Vorschläge mit" b "wie" b "," bdvhd "," bwgdydg ".Dies funktioniert gut, aber wenn ich irgendeinen Vorschlag auswähle Klicken Sie erneut auf Autocomplete-Textansicht, um das vorherige Ergebnis anzuzeigen auf allen b.

Ich habe versucht, notifyDataSetChanged() auf Element klicken, aber kein Glück.

+0

Thsi ist, wie Auto-Vervollständigen konfiguriert ist. –

+0

Nun, ich bin sicher, ich frage nicht so viel von Anpassung –

+0

Was ist Ihr erwartetes Verhalten? – x0r

Antwort

1

Ich verstehe, dass Sie, wenn Sie auf einen Text aus der Dropdownliste klicken, den AutoVervollständigen-Vorschlag basierend auf dem von Ihnen ausgewählten neuen Text ändern möchten. Um das zu erreichen, müssen Sie die autoCompleteTextView Klasse erweitern, dann außer Kraft setzen replaceText() dann in Ihrem onItemSelected, rufen textView.replaceText((String)adapterView.getItemAtPosition(i));

etwas wie folgt aus:

Schritt 1: außer Kraft setzen AutoCompleteTextView

public class AutoComplete extends AutoCompleteTextView { 

public AutoComplete(Context context) { 
    super(context); 
} 

public AutoComplete(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public AutoComplete(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public AutoComplete(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
} 

@Override 
protected void replaceText(CharSequence text) { 
    super.replaceText(text); 
} 

}

Schritt2: ändern t er autoCompleteTextView inyour xml die man erstellt

<com.example.tester.AutoComplete 
     android:id="@+id/autocomplete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:completionThreshold="1" 

/> 

Schritt 3 verwenden die replaceText in Ihrem Code wie folgt hinzu:

final String [] array={"a", "abvc", "ajedghed", "b", "bdvhd", "bwgdydg", "c", "cswjwwd", 
      "ssehdk","chakra"}; 
    final AutoComplete textView=(AutoComplete) findViewById(R.id.autocomplete); 
    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      textView.showDropDown(); 
     } 
    }); 
    if (textView!=null) 
    textView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,array)); 

    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

      textView.replaceText((String)adapterView.getItemAtPosition(i)); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 

     } 
    }); 
+0

Sie haben mich richtig!. Vielen Dank für die nette Erklärung.Scheinen wie dies funktioniert, aber ich habe etwas anderes versucht, die auch funktionierte, d. H. Einstellung Autocomplete Ansicht Text auf den ausgewählten Text in Onclicklistener. 'textView.setText (((TextView) Ansicht) .getText());' –

+1

wow dir ist viel kürzer :). Ich nahm an, sobald der ausgewählte Text in der textView angezeigt wird, setText wurde bereits aufgerufen, und da der Vorschlag nicht aktualisiert wurde, bedeutet es, setText() hat nicht funktioniert. – NezSpencer

+0

Genau, setText wird nicht aufgerufen, auch wenn es sollte. –

0

Versuchen Sie etwas wie das, wenn der Benutzer erneut klickt, so dass die Textansicht keinen Text enthält und der Adapter alle Elemente in der Liste zurückgibt.

if(textView.getText().toString() != null && textView.getText().toString().trim() != "") { 
     textView.setText(null); 
    } 
+0

Dies wird nicht den erwarteten Satz von Vorschlägen zurückgeben, ich möchte, dass meine Vorschläge auf dem ausgewählten Text basieren. In diesem Fall werden Vorschläge angezeigt, die der leeren Ansicht entsprechen. –