2016-07-31 11 views
0

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
+0

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

+0

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

+0

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

Antwort

0

Ich ging durch das verknüpfte Tutorial und kann bestätigen, dass alles funktioniert. Wenn Sie weiter spezifizieren könnten, was nicht funktioniert, wofür Sie Hilfe benötigen und warum Sie auf LinearLayout statt ListView bestehen, dann könnte ich eine größere Hilfe sein. Hier sind zwei Screenshots, die zeigen, wie das Tutorial funktioniert, ich habe von LinearLayout auf ListView zurückgesetzt, wie im Tutorial gezeigt. Lass mich wissen, wozu du genau Hilfe brauchst.

http://imgur.com/a/CfAD9

Wenn Sie weitere Informationen/mehrere Textfelder zu einer einzigen Liste Zeile hinzufügen möchten, müssen Sie eine benutzerdefinierte ListAdapter verwenden müssen, und wenn Sie eine wirklich große Datenmenge verwenden, die Sie anzeigen und das Scrollen/das Laden ist langsam Sie sollten eine RecyclerView verwenden.

+0

Danke Markus, ich habe es am Ende zum Laufen gebracht. – ak1652

+0

@ ak1652 Das ist gut, brauchst du noch Hilfe bei dieser Frage - http://stackoverflow.com/questions/38704968/how-to-make-a-listview-display-all-items-without-crolliing? Wenn Sie diese Antwort als akzeptiert markieren könnten, würde ich es begrüßen. – eeffoc

+0

Nein, das funktioniert auch. Vielen Dank :) – ak1652

Verwandte Themen