2016-07-31 3 views
0

Поняв это, http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/, я попытался изменить его для работы с LinearLayout, а не с ListView.Добавление фильтра поиска в linearlayout

В моем приложении я не могу использовать ListView в этом экземпляре (поскольку я показываю довольно большой список и не хочу его прокручивать - скорее, это весь прокручиваемый экран) ,

В любом случае, я пытаюсь заставить его работать с LinearLayout, но я подозреваю, что есть проблема с getFilter() и LinearLayout. Был бы признателен за некоторые рекомендации

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> 

Примечание: по понятным причинам, это не моя настоящая приложение, но небольшое тестовое приложение, чтобы сделать linearlayout работать с фильтром

+0

Между вашим LinearLayout и адаптером нет никакой связи. Как макет знает, что фильтр был применен? В случае ListView вы указываете listView.setAdapter (адаптер); Но вы этого не делаете. – Nikhil

+0

Понял, но это то, как я добавлял свои предметы в линейный макет. Я считаю, что ListView не может быть принудительно не прокручиваться (т. Е. Отображать все элементы)? – ak1652

+0

Я думаю, а не пытаюсь что-то очень сложное, я выясню способ использования списка, а затем вместо этого просто использую предоставленный код. – ak1652

ответ

0

Я прошел через связанный учебник и могу подтвердить, что все работает. Если бы вы могли указать, что не работает, что вам нужно, и почему вы настаиваете на LinearLayout вместо ListView, тогда я мог бы оказать большую помощь. Вот два скриншота, чтобы показать, как работает учебник, я вернулся из вашего LinearLayout в ListView, как показано в учебнике. Позвольте мне знать, с чем вам нужна помощь.

http://imgur.com/a/CfAD9

Если вы хотите добавить больше информации/несколько текстовых полей в одном списке строки вы должны будете использовать пользовательские ListAdapter и если вы используете очень большой набор данных, который вы показываете и скроллинг/загрузка медленная, вы должны использовать RecyclerView.

+0

Спасибо Маркусу, я получил его, чтобы работать в конце. – ak1652

+0

@ ak1652 Это хорошо, вам все еще нужна помощь в этом вопросе - http://stackoverflow.com/questions/38704968/how-to-make-a-listview-display-all-items-without-scrolliing? Если бы вы могли отметить этот ответ как принято, я был бы признателен. – eeffoc

+0

Нет, так и получилось. Большое спасибо :) – ak1652

Смежные вопросы