搜索XML解析 [英] Search xml parse

查看:185
本文介绍了搜索XML解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android的新的。
我有我试图用Java来搜索XML文件。
(这个问题是在编辑文本)。

我的code,则需要修改

我怎么可以做搜索,从编辑文本获取文本和过滤结果列表视图中?
这是我的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()过滤器(为a​​rg0);
            / *
             *最终意图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).

my code need edit

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆