2011-01-14 13 views
2

Ich versuche, ListActivity mit einem AutoCompleteTextView zu erstellen. Die Listview hat listItems, die aus einem ImageView und 2 TextViews besteht. Alles funktioniert gut, außer für die Autocomplete-Strings. Ich benutze einen ArrayAdapter, aber ich weiß nicht, wie man die Strings (COUNTRIES) setzt. Hier ist ein Teil des Codes.AutoCompleteTextView Probleme mit benutzerdefinierten Liste

public class SearchActivity erweitert ListActivity {

static final String[] COUNTRIES = new String[] { 
     "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 
     "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", 
     "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", 
     "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", 
     "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", 
     "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory", 
     "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi", 
     "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde", 
     "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", 
     "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", 
     "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic" 
    }; 

private AutoCompleteTextView searchView; 
private ListView    mListView; 
private ArrayList<MyItem>  itemList   = new ArrayList<MyItem>(); 
private ListItemAdapter   searchListAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.search); 

    searchView = (AutoCompleteTextView) findViewById(R.id.search_text); 
    searchView.setAdapter(searchListAdapter); 

    searchListAdapter = new ListItemAdapter(this, R.layout.search_row, itemList); 
    setListAdapter(searchListAdapter); 

    mListView = getListView(); 
    mListView.setTextFilterEnabled(false); 
} 

/** 
* This class is used to for the list objects. 
*/ 
private class ListItemAdapter extends ArrayAdapter<MyItem> { 

    private ArrayList<MyItem> bevs; 
    private MyItem   bevItem; 

    private TextView    nameView; 
    private TextView    descView; 
    private ImageView    imageView; 

    public ListItemAdapter(Context context, int textViewResourceId, 
      ArrayList<MyItem> itemList) { 
     super(context, textViewResourceId, itemList); 
     this.bevs = itemList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 


    /* Update the views */ 

     return view; 
    } 
} 

}

Bitte mich

/Prost Adrian

Antwort

1

Ich denke, das Wichtigste ist, die Sie vermissen in die richtige Richtung ist Erstellen Sie tatsächlich einen Adapter für das Länder-Array.

ArrayAdapter<String> autocompleteCountriesAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, COUNTRIES); 

Dann wird Ihren Code für die vollständige Textansicht Auto ändern, es zu benutzen:

searchView = (AutoCompleteTextView) findViewById(R.id.search_text); 
searchView.setAdapter(autocompleteCountriesAdapter); 

überprüfen Sie dieses Beispiel aus: Auto Complete Text View | Android Beginner Dev Tutorial

+0

Aber wenn ich es zu ArrayAdapter ändern wie kann ich die "ArrayList itemList;" zur Liste? – Adrian

+0

Vielleicht vermisse ich verstanden - Sie haben tatsächlich zwei Listen von Dingen, für die Sie Adapter benötigen: eine für die Liste und eine für die Auto-Vollansicht - habe ich das richtig? –

+0

Mein schlechtes! Es scheint, dass ich den "searchListAdapter" sowohl der Liste als auch der textView hinzugefügt habe. Also wie du gesagt hast, brauche ich eigentlich einen Adapter für den TextView und einen Adapter für die Liste. Jetzt funktioniert es, aber die "vorgeschlagenen" Strings passen nicht in die visuelle Komponente, es wird halbiert. Aber ich muss wahrscheinlich eine neue Frage dafür stellen;). Vielen Dank! – Adrian

0

Ich erinnere mich nur eine Frage, die ich vor kurzem Trying to filter a ListView with runQueryOnBackgroundThread but nothing happens - what am I missing? gefragt. In meinem Fall hatte ich Probleme, den Inhalt der Liste zu aktualisieren, wenn eine Suchzeichenfolge in ein Textfeld eingegeben wurde. Auf der Oberfläche ist es nicht das gleiche Problem wie bei Ihnen, aber vielleicht versuchen Sie das Gleiche zu erreichen. Ich habe versucht, eine Suchaktivität zu erstellen, damit Nutzer ein Land für meine WorldInfo-App auswählen können. Die Idee war, dass sie einen Suchknopf in der Hauptaktivität drücken und eine Liste von Ländern sehen, die sie filtern können, indem sie in ein Textfeld eintippen. Dann können sie das gewünschte Land auswählen.

Es stellt sich heraus, dass eine solche Einrichtung in Android eingebaut ist! Überprüfen Sie die Antwort auf meine Frage von Shawn Lauzon.

Es hat einige Zeit gedauert, um richtig in die Systemsucheinrichtung integriert zu werden, aber die Erfahrung ist viel besser.

+0

Nneed Hilfe http://StackOverflow.com/Questions/29045738/customadapter-constructor-undefined –

Verwandte Themen