2013-07-17 66 views
0

我有一個EditText和一個ListView。 ListView中的項目包含兩個TextView。如果用戶在EditText中輸入某些內容,我需要過濾ListView。我的適配器:在ListView中過濾文本android

public class AdapterUserIsp extends ArrayAdapter{ 

public static ArrayList<ItemUserIsp> data = new ArrayList<ItemUserIsp>(); 
Context context; 
int ch = 0; 

public static TextView header4; 
@SuppressWarnings("unchecked") 
public AdapterUserIsp(Context context, int textViewResourceId, ArrayList<ItemUserIsp> arr) { 
    super(context, textViewResourceId, arr); 
    if (arr != null) { 
     data = arr; 
    } 
    this.context = context; 

    // TODO Auto-generated constructor stub 
} 
@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return data.size(); 
} 

@Override 
public Object getItem(int num) { 
    // TODO Auto-generated method stub 
    return data.get(num); 
} 

@Override 
public long getItemId(int arg0) { 
    return arg0; 
} 

@SuppressLint("NewApi") 
@Override 
public View getView(int i, View someView, ViewGroup arg2) { 

    LayoutInflater inflater = LayoutInflater.from(context); 
    if (someView == null) { 
     someView = inflater.inflate(R.layout.item_user_isp, arg2, false); 
    } 

    TextView header1 = (TextView) someView.findViewById(R.id.tvUserNameIsp); 
    TextView header2 = (TextView) someView.findViewById(R.id.tvUserPositionIsp); 
    header1.setText(data.get(i).header1); 
    header2.setText(data.get(i).header2); 

    return someView; 
} 

} 

我的活動:

final ListView lv = (ListView)findViewById(R.id.users); 
    final AdapterUserIsp adapter = new AdapterUserIsp(this,R.id.users,data); 
final EditText search= (EditText)findViewById(R.id.search); 
    search_isp.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 
      adapter.getFilter().filter(s); 
      lv.invalidateViews(); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }); 

但它不工作。爲什麼?謝謝!

回答

0

在lv.invalidateViews()之後插入以下行; onTextChanged方法。

adapter.notifyDataSetChanged(); 

而且如果您要覆蓋篩選器方法,則必須從Filterable實現適配器類。

if adapter.notifyDataSetChanged();不起作用,不要使用final作爲適配器,在onTextChanged中獲取適配器並在過濾文本之後。

YourAdapterOrWhateverAdapter adapter = (YourAdapterOrWhateverAdapter) listView.getAdapter(); 
adapter.getFilter().filter(s); 
adapter.notifyDataSetChanged(); 

注意:這僅僅是猜測..

0

必須更新您的適配器。

如果你只是增加一些新的項目,您的列表ARR你必須調用:

adapter.notifyDataSetChanged(); 

如果要重畫,你可以重新設置圖像適配器的所有項目:

lv.setAdapter(adapter); 

希望這將幫助你:)

+0

當我輸入的東西我的ListView沒有反應 – uricor

+0

你可以發佈你輸入的內容嗎?否則,我只能猜測你做了什麼:) – owe