Nachdem ich mir das angesehen habe, http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/, habe ich versucht, es so zu modifizieren, dass es mit einem LinearLayout statt mit einem ListView funktioniert.Hinzufügen eines Suchfilters zu einem linearen Layout
In meiner Anwendung kann ich in dieser Instanz kein ListView verwenden (da ich eine ziemlich große Liste anzeigen möchte und sie nicht scrollbar machen möchte - es ist vielmehr der gesamte Bildschirm, der scrollbar ist) .
Wie auch immer, ich versuche, es mit einem LinearLayout zu arbeiten, aber ich vermute, es gibt ein Problem mit getFilter()
und LinearLayout. Würden einige Hinweise schätzen
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<!-- Editext for Search -->
<EditText android:id="@+id/inputSearch"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search products.."
android:inputType="textVisiblePassword"/>
<LinearLayout
android:id="@+id/list_view_linear"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</LinearLayout>
</LinearLayout>
MainActivity.java
package com.me.searchfilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity {
// List view
private LinearLayout lv;
// Listview Adapter
ArrayAdapter<String> adapter;
// Search EditText
EditText inputSearch;
// ArrayList for Listview
ArrayList<HashMap<String, String>> productList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Listview Data
String products[] = {"Dell Inspiron", "HTC One X", "HTC Wildfire S", "HTC Sense", "HTC Sensation XE",
"iPhone 4S", "Samsung Galaxy Note 800",
"Samsung Galaxy S3", "MacBook Air", "Mac Mini", "MacBook Pro"};
lv = (LinearLayout) findViewById(R.id.list_view_linear);
inputSearch = (EditText) findViewById(R.id.inputSearch);
// Adding items to listview
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
for (int i = 0; i < adapter.getCount(); i++) {
View item = adapter.getView(i, null, null);
lv.addView(item);
}
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
// When user changed the Text
MainActivity.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
}
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- Single ListItem -->
<!-- Product Name -->
<TextView android:id="@+id/product_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:textSize="16dip"
android:textStyle="bold"/>
</LinearLayout>
Hinweis: aus offensichtlichen Gründen ist dies nicht mein wirkliches Anwendung, aber eine kleine Test-App, um ein lineares Layout mit dem Filter
arbeiten
Es gibt keine Verbindung zwischen Ihrem LinearLayout und dem Adapter. Wie weiß das Layout, dass ein Filter angewendet wurde? Im Falle von ListView sagen Sie listView.setAdapter (adapter); Aber das machst du hier nicht. – Nikhil
Verstanden, aber so habe ich meine Artikel zum linearen Layout hinzugefügt. Ich glaube, dass ein ListView nicht gezwungen werden kann, nicht zu scrollen (d. H. Alle Elemente anzeigen)? – ak1652
Ich denke, anstatt etwas sehr überkompliziert zu versuchen, werde ich einen Weg finden, die Listview zu verwenden und dann nur den bereitgestellten Code zu verwenden. – ak1652