Android
Listenansicht
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 .