Suche…


Einführung

ListView ist eine Ansichtsgruppe, die mehrere Elemente aus einer Datenquelle wie einem Array oder einer Datenbank zusammenfasst und in einer scrollbaren Liste anzeigt. Daten werden mithilfe einer Adapterklasse an die Listendarstellung gebunden.

Bemerkungen

ListView ist eine Ansichtsgruppe, in der eine Liste scrollbarer Elemente ListView wird.
Die Listenelemente werden automatisch mit einem Adapter in die Liste eingefügt, der Inhalt aus einer Quelle wie einem Array oder einer Datenbankabfrage abruft und jedes Elementergebnis in eine Ansicht konvertiert, die in der Liste enthalten ist.

Wenn der Inhalt Ihres Layouts dynamisch oder nicht vordefiniert ist, können Sie ein Layout verwenden, das die AdapterView Unterklassen AdapterView , um das Layout zur Laufzeit mit Ansichten zu AdapterView . Eine Unterklasse der AdapterView Klasse verwendet einen Adapter , um Daten an das Layout zu binden.

Bevor Sie die ListView , sollten Sie auch die RecyclerView Beispiele überprüfen.

Filtern mit CursorAdapter

// Get the reference to your ListView
ListView listResults = (ListView) findViewById(R.id.listResults);

// Set its adapter
listResults.setAdapter(adapter);

// Enable filtering in ListView
listResults.setTextFilterEnabled(true);

// Prepare your adapter for filtering    
adapter.setFilterQueryProvider(new FilterQueryProvider() {
    @Override
    public Cursor runQuery(CharSequence constraint) {

        // in real life, do something more secure than concatenation
        // but it will depend on your schema
        // This is the query that will run on filtering
        String query = "SELECT _ID as _id, name FROM MYTABLE "
                       + "where name like '%" + constraint + "%' "
                       + "ORDER BY NAME ASC";
        return db.rawQuery(query, null);
     }
});

EditText , Ihre Abfrage wird jedes Mal ausgeführt, wenn der Benutzer einen EditText :

    EditText queryText = (EditText) findViewById(R.id.textQuery);
    queryText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(final CharSequence s, final int start, final int count, final int after) {

        }

        @Override
        public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
            // This is the filter in action
            adapter.getFilter().filter(s.toString());
            // Don't forget to notify the adapter
            adapter.notifyDataSetChanged();
        }

        @Override
        public void afterTextChanged(final Editable s) {

        }
    });

Benutzerdefinierter ArrayAdapter

Standardmäßig erstellt die ArrayAdapter-Klasse eine Ansicht für jedes Arrayelement, indem Sie für jedes Element toString() aufrufen und den Inhalt in eine TextView einfügen.

Um eine komplexe Ansicht für jedes Element zu erstellen (z. B. wenn Sie für jedes Array-Element eine ImageView erstellen möchten), erweitern Sie die ArrayAdapter-Klasse, und überschreiben Sie die getView() Methode, um den für jedes Element getView() zurückzugeben.

Zum Beispiel:

public class MyAdapter extends ArrayAdapter<YourClassData>{

    private LayoutInflater inflater;

    public MyAdapter (Context context, List<YourClassData> data){
        super(context, 0, data);
        inflater = LayoutInflater.from(context);
    }

    @Override
    public long getItemId(int position)
    {
        //It is just an example
        YourClassData data = (YourClassData) getItem(position);
        return data.ID;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent)
    {
        ViewHolder viewHolder;
        if (view == null) {
            view = inflater.inflate(R.layout.custom_row_layout_design, null);
            // Do some initialization
        
            //Retrieve the view on the item layout and set the value.
            viewHolder = new ViewHolder(view);
            view.setTag(viewHolder);
         }
         else {
             viewHolder = (ViewHolder) view.getTag();
         }
         
        //Retrieve your object    
        YourClassData data = (YourClassData) getItem(position);
       
        viewHolder.txt.setTypeface(m_Font);    
        viewHolder.txt.setText(data.text);              
        viewHolder.img.setImageBitmap(BitmapFactory.decodeFile(data.imageAddr));
        
        return view;
    
    }

    private class ViewHolder
    {
         private final TextView txt;
         private final ImageView img;

         private ViewHolder(View view) 
         {
             txt = (TextView) view.findViewById(R.id.txt);
             img = (ImageView) view.findViewById(R.id.img);
         }
    }
}

Eine grundlegende ListView mit einem ArrayAdapter

Standardmäßig erstellt der ArrayAdapter eine Ansicht für jedes ArrayAdapter indem Sie für jedes Element toString() aufrufen und den Inhalt in eine TextView .

Beispiel:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, myStringArray);

Dabei ist android.R.layout.simple_list_item_1 das Layout, das eine TextView für jeden String im Array enthält.

Dann rufen setAdapter() einfach setAdapter() in Ihrer ListView :

ListView listView = (ListView) findViewById(R.id.listview);
listView.setAdapter(adapter);

Wenn Sie für die Array-Anzeige etwas anderes als TextViews verwenden möchten, z. B. ImageViews, oder außer toString() Ergebnisse mit Daten füllen, überschreiben Sie getView(int, View, ViewGroup) , um den gewünschten Ansichtstyp zurückzugeben. Überprüfen Sie dieses Beispiel .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow