搜索XML解析 [英] Search xml parse
问题描述
我在Android的新的。
我有我试图用Java来搜索XML文件。
(这个问题是在编辑文本)。
我怎么可以做搜索,从编辑文本获取文本和过滤结果列表视图中?
这是我的code:
包com.search.xmlParsing;公共类MainActivity扩展ListActivity {公共静态最后弦乐LOGTAG =EXPLORECA;
公共静态最后弦乐USERNAME =pref_username
公共静态最后弦乐VIEWIMAGE =pref_viewimages
私有静态最终诠释TOUR_DETAIL_ACTIVITY = 1001;
私人共享preferences设置;
私人OnShared preferenceChangeListener侦听器;
私人列表<旅游及GT;旅游;
布尔isMyTours;
ToursDataSource数据源;
ArrayAdapter<旅游及GT;适配器;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
/ *
* ArrayAdapter<旅游及GT;适配器=新TourListAdapter(此,旅游服务);
* setListAdapter(适配器);
* /
最终的EditText EDITTEXT =(EditText上)findViewById(R.id.editTextSearch); editText.addTextChangedListener(新TextWatcher(){ @覆盖
公共无效onTextChanged(CharSequence的CS,INT ARG1,ARG2 INT,
INT ARG3){
} @覆盖
公共无效beforeTextChanged(CharSequence的为arg0,ARG1 INT,
INT ARG2,诠释ARG3){
} @覆盖
公共无效afterTextChanged(编辑为arg0){
。MainActivity.this.adapter.getFilter()过滤器(为arg0);
/ *
*最终意图queryIntent = getIntent();最后弦乐
* queryAction = queryIntent.getAction();如果
*(Intent.ACTION_SEARCH.equals(queryAction)){
* doSearchQuery(queryIntentonNewIntent()); }其他{//
* mDeliveredByText
* .setText(onNewIntent(),但没有意图ACTION_SEARCH); }
* /
}
});
设置= preferenceManager.getDefaultShared preferences(本); 听众=新OnShared preferenceChangeListener(){ @覆盖
公共无效onShared preferenceChanged(
共享preferences共享preferences,串键){
MainActivity.this.refreshDisplay();
}
};
settings.registerOnShared preferenceChangeListener(监听); 数据源=新ToursDataSource(本);
datasource.open(); 旅行团= datasource.findAll();
如果(tours.size()== 0){
createData();
旅行团= datasource.findAll();
}
isMyTours = FALSE; refreshDisplay();}公共无效refreshDisplay(){ 布尔viewImages = settings.getBoolean(VIEWIMAGE,真); 如果(viewImages){
ArrayAdapter<旅游及GT;适配器=新TourListAdapter(此,旅游服务);
setListAdapter(适配器);
}其他{
ArrayAdapter<旅游及GT;适配器=新ArrayAdapter<旅游及GT;(这一点,
android.R.layout.simple_list_item_1,旅游服务);
setListAdapter(适配器);
}}@覆盖
保护无效onResume(){
super.onResume();
datasource.open();
}@覆盖
保护无效的onPause(){
super.onPause();
datasource.close();
}私人无效createData(){
ToursPullParser分析器=新ToursPullParser();
清单<旅游及GT;旅行团= parser.parseXML(本); 对于(游游:游览){
datasource.create(旅游);
}
}@覆盖
保护无效onListItemClick(ListView中升,视图V,INT位置,长的id){
super.onListItemClick(L,V,位置ID);
游览游览= tours.get(位置);
意向意图=新意图(这一点,TourDetailActivity.class);
intent.putExtra(model.Tour,旅游);
intent.putExtra(isMyTours,isMyTours);
startActivityForResult(意向,TOUR_DETAIL_ACTIVITY);}/ *
* @覆盖保护无效的onActivityResult(INT申请code,INT
*结果code,意图数据){super.onActivityResult(要求code,
*结果code,数据);
*
*如果(要求code == TOUR_DETAIL_ACTIVITY&放大器;&安培;结果code == -1){
* datasource.open();旅行团= datasource.findMyTours(); refreshDisplay();
* isMyTours = TRUE;
*
*}}
* /
/ *
*私人无效doSearchQuery(最终意图queryIntent,最后弦乐
* 入口点) {
*
* //搜索查询被提供作为在查询意图一个额外的串
*最后弦乐的queryString =
* queryIntent.getStringExtra(SearchManager.QUERY); //
* mQueryText.setText(的queryString);
*
* //记录最近查询的建议提供的查询字符串。 //
* SearchRecentSuggestions建议=新SearchRecentSuggestions(这一点,
* // SearchSuggestionSampleProvider.AUTHORITY,
* SearchSuggestionSampleProvider.MODE); //
* suggestions.saveRecentQuery(的queryString,NULL);最后的捆绑应用程序数据=
* queryIntent.getBundleExtra(SearchManager.APP_DATA);如果(AppData的== NULL)
* {// mAppDataText.setText(<没有应用数据包>); }如果(AppData的!= NULL)
* {字符串testStr = appData.getString(demo_key); //
* mAppDataText.setText((testStr == NULL)<无应用数据和gt;中:testStr); }
*
* // mDeliveredByText.setText(为entryPoint);
*
*}
* /
}
但它强制关闭!!!!
这是日志的猫:
7月8日至4日:10:51.045:E / AndroidRuntime(11234):致命异常:主要
7月8日至四日:10:51.045:E / AndroidRuntime(11234):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.search.xmlParse / com.search.xmlParsing.MainActivity2}:显示java.lang.NullPointerException
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread.access $ 1500(ActivityThread.java:123)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:939)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.os.Handler.dispatchMessage(Handler.java:99)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.os.Looper.loop(Looper.java:130)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread.main(ActivityThread.java:3835)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在java.lang.reflect.Method.invokeNative(本机方法)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在java.lang.reflect.Method.invoke(Method.java:507)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:847)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在dalvik.system.NativeStart.main(本机方法)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):致:显示java.lang.NullPointerException
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在com.search.xmlParsing.MainActivity2.refreshDisplay(MainActivity2.java:63)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在com.search.xmlParsing.MainActivity2.onCreate(MainActivity2.java:58)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
7月8日至四日:10:51.045:E / AndroidRuntime(11234):... 11个
我有其他的方法来搜索列表,我希望这将有助于你。
我看到你的code和我在两个班所做的更改。在 MainActivity
我改变了 ListActivity
到活动
和code是:
公共类MainActivity2扩展活动实现OnItemClickListener,
TextWatcher { 公共静态最后弦乐LOGTAG =EXPLORECA;
公共静态最后弦乐USERNAME =pref_username
公共静态最后弦乐VIEWIMAGE =pref_viewimages
私有静态最终诠释TOUR_DETAIL_ACTIVITY = 1001;
私人共享preferences设置;
私人OnShared preferenceChangeListener侦听器;
私人列表<旅游及GT;旅游;
布尔isMyTours;
ToursDataSource数据源; 私人TourListAdapter2 mAdapter;
私人的ListView lviTours; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 的setContentView(R.layout.main); 最终的EditText EDITTEXT =(EditText上)findViewById(R.id.editTextSearch); lviTours =(ListView控件)findViewById(android.R.id.list);
lviTours.setOnItemClickListener(本); editText.addTextChangedListener(本);
数据源=新ToursDataSource(本);
datasource.open();设置= preferenceManager.getDefaultShared preferences(本); 听众=新OnShared preferenceChangeListener(){ @覆盖
公共无效onShared preferenceChanged(
共享preferences共享preferences,串键){
MainActivity.this.refreshDisplay();
}
};
settings.registerOnShared preferenceChangeListener(监听); 旅行团= datasource.findAll();
如果(tours.size()== 0){
createData();
旅行团= datasource.findAll();
}
isMyTours = FALSE;
refreshDisplay();
} 公共无效refreshDisplay(){ 布尔viewImages = settings.getBoolean(VIEWIMAGE,真); 如果(viewImages){
// ArrayAdapter<旅游及GT;适配器=新TourListAdapter(此,旅游服务);
// setListAdapter(适配器);
mAdapter =新TourListAdapter2(此,旅游服务);
lviTours.setAdapter(mAdapter);
}其他{ mAdapter =新TourListAdapter2(此,旅游服务);
lviTours.setAdapter(mAdapter);
// ArrayAdapter<旅游及GT;适配器=新ArrayAdapter<旅游及GT;(这一点,
// android.R.layout.simple_list_item_1,旅游服务);
// setListAdapter(适配器);
} } @覆盖
保护无效onResume(){
super.onResume();
datasource.open();
} @覆盖
保护无效的onPause(){
super.onPause();
datasource.close();
} 私人无效createData(){
ToursPullParser分析器=新ToursPullParser();
清单<旅游及GT;旅行团= parser.parseXML(本); 对于(游游:游览){
datasource.create(旅游);
}
} / *********** SEARCH **************** /
@覆盖
公共无效afterTextChanged(编辑为arg0){ } @覆盖
公共无效beforeTextChanged(CharSequence的为arg0,ARG1 INT,INT ARG2,
INT ARG3){ } @覆盖
公共无效onTextChanged(CharSequence的CS,INT ARG1,ARG2 INT,INT ARG3){
。mAdapter.getFilter()过滤器(CS); } @覆盖
公共无效onItemClick(适配器视图<>适配器,观景,INT位置,
长ID){
游览游览= tours.get(位置);
意向意图=新意图(这一点,TourDetailActivity.class);
intent.putExtra(model.Tour,旅游);
intent.putExtra(isMyTours,isMyTours);
startActivityForResult(意向,TOUR_DETAIL_ACTIVITY); } }
和我创建另一个类 TourListAdapter2
其中的扩展 BaseAdapter
和工具 可筛选
来在列表中搜索。在code是:
公共类TourListAdapter2扩展BaseAdapter实现的可筛选{
私人LayoutInflater mInflater;
清单<旅游及GT; mList;
清单<旅游及GT; MFILTER;
清单<旅游及GT;旅游;
私人语境mContext;公共TourListAdapter2(上下文的背景下,列表与LT;旅游及GT;旅游){
mContext =背景;
mInflater = LayoutInflater.from(上下文);
mList =游;
MFILTER =游;
}@覆盖
公众诠释的getCount(){ 返回mFilter.size();
}@覆盖
公共对象的getItem(INT位置){
返回mFilter.get(位置);
}@覆盖
众长getItemId(INT位置){
返回mFilter.get(位置).getId();
}@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
ViewHolder viewHolder; 游览游览=(巡回赛)的getItem(位置);
如果(convertView == NULL){
convertView = mInflater.inflate(R.layout.listitem,NULL);
viewHolder =新ViewHolder();
viewHolder.tviName =(TextView中)convertView
.findViewById(R.id.titleText); viewHolder.iviImage =(ImageView的)convertView
.findViewById(R.id.imageView1); convertView.setTag(viewHolder);
}其他{
viewHolder =(ViewHolder)convertView.getTag();
} viewHolder.tviName.setText(tour.getTitle()); INT imageResource = mContext.getResources()则getIdentifier(
tour.getImage(),可拉伸,mContext.getPackageName());
如果(imageResource!= 0){
viewHolder.iviImage.setImageResource(imageResource);
} 返回convertView;
}类ViewHolder {
公众的TextView tviName;
公共ImageView的iviImage;
}/ *********** SEARCH ********** /
@覆盖
公共过滤用getFilter(){ 返回新过滤器(){ @燮pressWarnings(未登记)
@覆盖
保护无效publishResults(CharSequence的约束,
FilterResults结果){
MFILTER =(列表<旅游及GT;)results.values;
notifyDataSetChanged();
} @覆盖
保护FilterResults performFiltering(CharSequence中的CharSequence){ FilterResults结果=新FilterResults(); 如果(CharSequence的== NULL || charSequence.length()== 0){
results.values = mList;
results.count = mList.size();
}其他{
ArrayList的<旅游及GT; filterResultsData =新的ArrayList<旅游及GT;(); 对于(旅游数据:mList){ 如果(data.getTitle()。包括(CharSequence中)){
filterResultsData.add(数据);
}
} results.values = filterResultsData;
results.count = filterResultsData.size();
} 返回结果;
}
};
}
}
i am new in android. I have an XML file that I am trying to search using Java. (the problem is in the edit text).
how i can do a search that get text from edit text and filter the result in listview? this is my code:
package com.search.xmlParsing;
public class MainActivity extends ListActivity {
public static final String LOGTAG = "EXPLORECA";
public static final String USERNAME = "pref_username";
public static final String VIEWIMAGE = "pref_viewimages";
private static final int TOUR_DETAIL_ACTIVITY = 1001;
private SharedPreferences settings;
private OnSharedPreferenceChangeListener listener;
private List<Tour> tours;
boolean isMyTours;
ToursDataSource datasource;
ArrayAdapter<Tour> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*
* ArrayAdapter<Tour> adapter = new TourListAdapter(this, tours);
* setListAdapter(adapter);
*/
final EditText editText = (EditText) findViewById(R.id.editTextSearch);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
MainActivity.this.adapter.getFilter().filter(arg0);
/*
* final Intent queryIntent = getIntent(); final String
* queryAction = queryIntent.getAction(); if
* (Intent.ACTION_SEARCH.equals(queryAction)) {
* doSearchQuery(queryIntent, "onNewIntent()"); } else { //
* mDeliveredByText
* .setText("onNewIntent(), but no ACTION_SEARCH intent"); }
*/
}
});
settings = PreferenceManager.getDefaultSharedPreferences(this);
listener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
MainActivity.this.refreshDisplay();
}
};
settings.registerOnSharedPreferenceChangeListener(listener);
datasource = new ToursDataSource(this);
datasource.open();
tours = datasource.findAll();
if (tours.size() == 0) {
createData();
tours = datasource.findAll();
}
isMyTours = false;
refreshDisplay();
}
public void refreshDisplay() {
boolean viewImages = settings.getBoolean(VIEWIMAGE, true);
if (viewImages) {
ArrayAdapter<Tour> adapter = new TourListAdapter(this, tours);
setListAdapter(adapter);
} else {
ArrayAdapter<Tour> adapter = new ArrayAdapter<Tour>(this,
android.R.layout.simple_list_item_1, tours);
setListAdapter(adapter);
}
}
@Override
protected void onResume() {
super.onResume();
datasource.open();
}
@Override
protected void onPause() {
super.onPause();
datasource.close();
}
private void createData() {
ToursPullParser parser = new ToursPullParser();
List<Tour> tours = parser.parseXML(this);
for (Tour tour : tours) {
datasource.create(tour);
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Tour tour = tours.get(position);
Intent intent = new Intent(this, TourDetailActivity.class);
intent.putExtra(".model.Tour", tour);
intent.putExtra("isMyTours", isMyTours);
startActivityForResult(intent, TOUR_DETAIL_ACTIVITY);
}
/*
* @Override protected void onActivityResult(int requestCode, int
* resultCode, Intent data) { super.onActivityResult(requestCode,
* resultCode, data);
*
* if (requestCode == TOUR_DETAIL_ACTIVITY && resultCode == -1) {
* datasource.open(); tours = datasource.findMyTours(); refreshDisplay();
* isMyTours = true;
*
* } }
*/
/*
* private void doSearchQuery(final Intent queryIntent, final String
* entryPoint) {
*
* // The search query is provided as an "extra" string in the query intent
* final String queryString =
* queryIntent.getStringExtra(SearchManager.QUERY); //
* mQueryText.setText(queryString);
*
* // Record the query string in the recent queries suggestions provider. //
* SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
* // SearchSuggestionSampleProvider.AUTHORITY,
* SearchSuggestionSampleProvider.MODE); //
* suggestions.saveRecentQuery(queryString, null); final Bundle appData =
* queryIntent.getBundleExtra(SearchManager.APP_DATA); if (appData == null)
* { // mAppDataText.setText("<no app data bundle>"); } if (appData != null)
* { String testStr = appData.getString("demo_key"); //
* mAppDataText.setText((testStr == null) ? "<no app data>" : testStr); }
*
* // mDeliveredByText.setText(entryPoint);
*
* }
*/
}
but it force close !!!!
this is log cat:
08-04 07:10:51.045: E/AndroidRuntime(11234): FATAL EXCEPTION: main
08-04 07:10:51.045: E/AndroidRuntime(11234): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.search.xmlParse/com.search.xmlParsing.MainActivity2}: java.lang.NullPointerException
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.os.Looper.loop(Looper.java:130)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread.main(ActivityThread.java:3835)
08-04 07:10:51.045: E/AndroidRuntime(11234): at java.lang.reflect.Method.invokeNative(Native Method)
08-04 07:10:51.045: E/AndroidRuntime(11234): at java.lang.reflect.Method.invoke(Method.java:507)
08-04 07:10:51.045: E/AndroidRuntime(11234): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
08-04 07:10:51.045: E/AndroidRuntime(11234): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
08-04 07:10:51.045: E/AndroidRuntime(11234): at dalvik.system.NativeStart.main(Native Method)
08-04 07:10:51.045: E/AndroidRuntime(11234): Caused by: java.lang.NullPointerException
08-04 07:10:51.045: E/AndroidRuntime(11234): at com.search.xmlParsing.MainActivity2.refreshDisplay(MainActivity2.java:63)
08-04 07:10:51.045: E/AndroidRuntime(11234): at com.search.xmlParsing.MainActivity2.onCreate(MainActivity2.java:58)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-04 07:10:51.045: E/AndroidRuntime(11234): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
08-04 07:10:51.045: E/AndroidRuntime(11234): ... 11 more
I have another way to search the list and I hope this will be helpful to you.
I saw your code and I made changes in two classes. In the MainActivity
I changed ListActivity
to Activity
and the code is:
public class MainActivity2 extends Activity implements OnItemClickListener,
TextWatcher {
public static final String LOGTAG = "EXPLORECA";
public static final String USERNAME = "pref_username";
public static final String VIEWIMAGE = "pref_viewimages";
private static final int TOUR_DETAIL_ACTIVITY = 1001;
private SharedPreferences settings;
private OnSharedPreferenceChangeListener listener;
private List<Tour> tours;
boolean isMyTours;
ToursDataSource datasource;
private TourListAdapter2 mAdapter;
private ListView lviTours;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final EditText editText = (EditText) findViewById(R.id.editTextSearch);
lviTours = (ListView) findViewById(android.R.id.list);
lviTours.setOnItemClickListener(this);
editText.addTextChangedListener(this);
datasource = new ToursDataSource(this);
datasource.open();
settings = PreferenceManager.getDefaultSharedPreferences(this);
listener = new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
MainActivity.this.refreshDisplay();
}
};
settings.registerOnSharedPreferenceChangeListener(listener);
tours = datasource.findAll();
if (tours.size() == 0) {
createData();
tours = datasource.findAll();
}
isMyTours = false;
refreshDisplay();
}
public void refreshDisplay() {
boolean viewImages = settings.getBoolean(VIEWIMAGE, true);
if (viewImages) {
// ArrayAdapter<Tour> adapter = new TourListAdapter(this, tours);
// setListAdapter(adapter);
mAdapter = new TourListAdapter2(this, tours);
lviTours.setAdapter(mAdapter);
} else {
mAdapter = new TourListAdapter2(this, tours);
lviTours.setAdapter(mAdapter);
// ArrayAdapter<Tour> adapter = new ArrayAdapter<Tour>(this,
// android.R.layout.simple_list_item_1, tours);
// setListAdapter(adapter);
}
}
@Override
protected void onResume() {
super.onResume();
datasource.open();
}
@Override
protected void onPause() {
super.onPause();
datasource.close();
}
private void createData() {
ToursPullParser parser = new ToursPullParser();
List<Tour> tours = parser.parseXML(this);
for (Tour tour : tours) {
datasource.create(tour);
}
}
/*********** SEARCH ****************/
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
mAdapter.getFilter().filter(cs);
}
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,
long id) {
Tour tour = tours.get(position);
Intent intent = new Intent(this, TourDetailActivity.class);
intent.putExtra(".model.Tour", tour);
intent.putExtra("isMyTours", isMyTours);
startActivityForResult(intent, TOUR_DETAIL_ACTIVITY);
}
}
And I created another class TourListAdapter2
which extends BaseAdapter
and implements Filterable
to search in the list. The code is:
public class TourListAdapter2 extends BaseAdapter implements Filterable {
private LayoutInflater mInflater;
List<Tour> mList;
List<Tour> mFilter;
List<Tour> tours;
private Context mContext;
public TourListAdapter2(Context context, List<Tour> tours) {
mContext = context;
mInflater = LayoutInflater.from(context);
mList = tours;
mFilter = tours;
}
@Override
public int getCount() {
return mFilter.size();
}
@Override
public Object getItem(int position) {
return mFilter.get(position);
}
@Override
public long getItemId(int position) {
return mFilter.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
Tour tour = (Tour) getItem(position);
if (convertView == null) {
convertView = mInflater.inflate(R.layout.listitem, null);
viewHolder = new ViewHolder();
viewHolder.tviName = (TextView) convertView
.findViewById(R.id.titleText);
viewHolder.iviImage = (ImageView) convertView
.findViewById(R.id.imageView1);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tviName.setText(tour.getTitle());
int imageResource = mContext.getResources().getIdentifier(
tour.getImage(), "drawable", mContext.getPackageName());
if (imageResource != 0) {
viewHolder.iviImage.setImageResource(imageResource);
}
return convertView;
}
class ViewHolder {
public TextView tviName;
public ImageView iviImage;
}
/*********** SEARCH **********/
@Override
public Filter getFilter() {
return new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
mFilter = (List<Tour>) results.values;
notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
FilterResults results = new FilterResults();
if (charSequence == null || charSequence.length() == 0) {
results.values = mList;
results.count = mList.size();
} else {
ArrayList<Tour> filterResultsData = new ArrayList<Tour>();
for (Tour data : mList) {
if (data.getTitle().contains(charSequence)) {
filterResultsData.add(data);
}
}
results.values = filterResultsData;
results.count = filterResultsData.size();
}
return results;
}
};
}
}
这篇关于搜索XML解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!