2014-07-07 49 views
0

我想一個過濾器添加到我的適配器類(它擴展了BaseAdapter)。設置過濾器適配器事業強制關閉應用

每一件事情正在啓動應用程序後,工作很細,但被重新創建活動時(通過屏幕旋轉或調用的onCreate)應用程序停止工作並提出了強制關閉錯誤

當我刪除此行有是重新創建活動

MainActivity.this.adapter.getFilter().filter(cs); 

沒有問題,但調試器顯示錯誤是

super.onCreate(savedInstanceState); 

這裏是我的主要活動onCrea TE功能:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    new Updator().execute();//Updator is a AsyncTask to update adapter 

    EditText inputSearch = (EditText) findViewById(R.id.editText1); 

    inputSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int start, int before, int count) 
     { 
      MainActivity.this.adapter.getFilter().filter(cs);//after screen rotation - application stops working when executing this line 

     } 

     @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 

     } 
    }); 

} 

,這是自定義適配器類我的濾波方法:

private class CustomListFilter extends Filter 

{ 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) 
     { 
      FilterResults results = new FilterResults(); 
      String prefix = constraint.toString().toLowerCase(); 

      if (prefix == null || prefix.length() == 0) 
      { 
       results.values = original; 
       results.count = original.size(); 
      } 
      else 
      { 

       final ArrayList<App> nlist = new ArrayList<App>(); 
       int count = original.size(); 
       App pkmn; 
       String value; 
       for (int i=0; i<count; i++) 
       { 
        pkmn = original.get(i); 
        value = pkmn.getName().toLowerCase(); 

        if (value.contains(prefix)) 
        { 
         nlist.add(pkmn); 
        } 
       } 
       results.values = nlist; 
       results.count = nlist.size(); 
      } 
      return results; 
     } 


     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence constraint, FilterResults results) 
     { 
      mApps = (ArrayList<App>)results.values; 

      if (mApps.size() > 0) 
       notifyDataSetChanged(); 
      else 
       notifyDataSetInvalidated(); 


     } 

    } 
+0

請從logcat的 –

+0

添加異常的堆棧跟蹤@GilMoshayof我不是那麼熟悉Eclipse,其中堆棧跟蹤? – Arashdn

+0

@GilMoshayof請張貼logcat中,得到的logcat看到這個帖子http://stackoverflow.com/questions/11608718/how-to-copy-logcat-output-to-clipboard –

回答

0

我的猜測(沒有看到logcat的痕跡),將您的問題得到一個空指針異常行:

MainActivity.this.adapter.getFilter().filter(cs); 

這可能是由於adapter被空,或getFilter()返回被空。

確保您創建一個非空變量被重新創建你的活動時!

+0

這些堆棧信息?螺紋[<1>主](暫停(例外IllegalStateException異常)) FragmentManagerImpl.attachActivity(FragmentActivity,FragmentContainer,片段)線:1867年MainActivity(FragmentActivity).onCreate(束)線:198 MainActivity(ActionBarActivity)。的onCreate(捆綁)線:97 MainActivity.onCreate(束)線:55 MainActivity.btnTest(查看)線:264 Method.invokeNative(對象,對象[],類,第[],類,整型,布爾值)線:不可用[native method] Method.invoke(Object,Object ...)line:515 – Arashdn

+0

嘗試(在eclise中),Window> Show View> Other ... Android> LogCat,一旦視圖打開,過濾出錯」。我認爲verbose是默認選擇的,當拋出異常時,突出顯示並複製,或者按下保存圖標。 如果沒有任何顯示,請確保您在「設備」視圖中選擇了設備 – cachedump