2014-02-18 7 views
0

У меня есть ListView, который содержит spinner, изображение и TextView. Над этим ListView у меня есть EditText, где пользователь может ввести его имя требуемого элемента, и все связанные элементы были показаны в ListView.Фильтр возвращает пустой список (0)

Мой код работает до сих пор, но проблема заключается в том, когда я ввожу строку в поле редактирования поиска, и она, когда я начинаю удалять символы, вид списка просто исчезает, и есть только пустой экран. в то время как вначале списокView, содержащий прядильщики, был успешно создан, но после выполнения фильтрации и удаления всех символов в окне поиска представление не может быть создано.

Вот мой код getFilter в LazyAdapter, который простирается от BaseAdapter

@SuppressLint("DefaultLocale") 
     public android.widget.Filter getFilter() { 

      return new android.widget.Filter() { 

       @SuppressLint("DefaultLocale") 
       @Override 
       protected FilterResults performFiltering(CharSequence constraint) { 
        FilterResults Result = new FilterResults(); 
        // if constraint is empty return the original names 
        if (TextUtils.isEmpty(constraint)){ 
         //Result.values = storedata; 
         Result.count = listDetails.size(); 
         return Result; 
        } 

        ArrayList<items> Filtered_Names = new ArrayList<items>(); 
        String filterString = constraint.toString().toLowerCase(); 
        String filterableString; 

        for(int i = 0; i<listDetails.size(); i++){ 
         items searchdata = listDetails.get(i); 
         String title = searchdata.title(); 
         String id = searchdata.id(); 
         String imageUrl = searchdata.imageUrl(); 
         String pprice = searchdata.pprice(); 
         String shippingPrice = searchdata.shippingPrice(); 
         String stock = searchdata.stock(); 

         filterableString = title+" "+id+" "+imageUrl+" "+pprice+" "+shippingPrice+" "+status+" "+stitle+" "+stock+" 
         if(filterableString.toLowerCase().contains(filterString)){ 
         Filtered_Names.add(listDetails.get(i)); 
         //Log.e("Added", String.valueOf(Filtered_Names.size())); 
         } 

         } 
        Result.values = Filtered_Names; 
        Result.count = Filtered_Names.size(); 
        //Log.e("Results", Result.values.toString() + String.valueOf(Result.count)); 
        return Result; 
       } 

       @Override 
       protected void publishResults(CharSequence constraint, 
         FilterResults results) { 
        // TODO Auto-generated method stub 
        @SuppressWarnings("unchecked") 
        ArrayList<items> resultList =(ArrayList<items>) results.values; 
     LazyAdapter.this.listDetails = resultList; 
     LazyAdapter.this.notifyDataSetChanged(); 
       } 

      }; 

     } 

Это конструктор LazyAdapter

public LazyAdapte(Context context , ArrayList<items> list) 
    { 
     this.context = context; 
     listDetails = list; 
     downloader = new ImageDownloader(); 
    } 

А вот мой GetCount() Метод

@Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return listDetails == null ? 0 : listDetails.size(); 
     } 

и введите код в Упражнение

public class ItemsActivity extends Activity{ 

    EditText inputsearch; 
    LazyAdapter adapter; 
    ArrayList<items> list; 
    Controller control; 

    @SuppressWarnings("unchecked") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.items_activity); 

     RelativeLayout layout = (RelativeLayout) findViewById(R.id._view); 

     control = (Controller) getApplicationContext(); 
     list = (ArrayList<items>) control.Table_items.GetData(); 
     final ListView listview = (ListView)findViewById(R.id._data); 

     final LazyAdapter adapter = new LazyAdapter(this, list); 
     adapter.setLayout(this, layout); 
     listview.setAdapter(adapter); 

    inputSearch = (EditText) findViewById(R.id.inputsearch); 
    if(adapter!=null){ 
    } 
    inputSearch.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 

       try{ 
        ItemsActivity.this.adapter.getFilter().filter(cs.toString()); 
       }catch(Exception e){ 
        e.printStackTrace(); 
       } 

      } 

      @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 

      } 
     }); 
} 
} 

Вот трассировки стека

Android Runtime E:com.example.itemspac.LazyAdapter.<init>(LazyAdapter.java:36) 
at com.example.itemspac.LazyAdapter.<init>(LazyAdapter.java:41) 

Здесь линия номер 36 имеет Конструктора public LazyAdapter(Context context , ArrayList<items> list) и 41 imagedownloader в LazyAdapter

+0

Можете ли вы опубликовать полный код? –

+1

Также, пожалуйста, напишите подробную информацию об исключениях – guptakvgaurav

+0

@YeLinAung Lin Aung теперь увидит вопрос, который я только что отредактировал. –

ответ

0

В следующем фрагменте из кода:

if (TextUtils.isEmpty(constraint)){ 
    //Result.values = storedata; 
    Result.count = listDetails.size(); 
    return Result; 
} 

У вас нет настроек Результат. значения. Это может привести к тому, что getCount() вашего адаптера будет пустым.

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