Android 列表视图在加载搜索数据时工作不正常

Android 列表视图在加载搜索数据时工作不正常,android,android-listview,Android,Android Listview,我实现了一个自定义列表视图,它显示文本和图像。列表视图从internet上的XML数据中获取数据。当用户向下滚动时,更多数据加载到应用程序中。现在,我正在尝试包括一个搜索栏,以便当用户搜索某些数据时,应用程序显示搜索返回的结果。主要问题是在执行搜索时列表视图没有显示正确的数据 当我检查浏览器中搜索栏正在执行的URL时,它会显示正确的结果,但在Android应用程序中,它的行为不同 以下是我执行整个工作的活动代码:- public class OrganizationActivity extend

我实现了一个自定义列表视图,它显示文本和图像。列表视图从internet上的XML数据中获取数据。当用户向下滚动时,更多数据加载到应用程序中。现在,我正在尝试包括一个搜索栏,以便当用户搜索某些数据时,应用程序显示搜索返回的结果。主要问题是在执行搜索时列表视图没有显示正确的数据

当我检查浏览器中搜索栏正在执行的URL时,它会显示正确的结果,但在Android应用程序中,它的行为不同

以下是我执行整个工作的活动代码:-

public class OrganizationActivity extends Activity implements OnScrollListener {

int itemsPerPage = 10;
boolean loadingMore = false;
int mPos=0;

// All static variables
static final String URL = "some URL";
static int page_no = 1;

// XML node keys
static final String KEY_ORGANIZATION = "organization"; // parent node
static final String KEY_ID = "id";
static final String KEY_NAME = "name";
static final String KEY_CITY = "city";
static final String KEY_STATE = "state";
static final String KEY_IMAGE_URL = "image";

ListView list;
LazyAdapter adapter;
ArrayList<HashMap<String, String>> orgsList = new ArrayList<HashMap<String, String>>();
private EditText filterText = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    filterText = (EditText) findViewById(R.id.search_box_et);
    filterText.addTextChangedListener(new TextWatcher() 
    {
        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1,
                int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub
            if(arg0.length()==0)
            {
                list.setAdapter(new LazyAdapter(OrganizationActivity.this, orgsList));
            }
            list.setAdapter(new LazyAdapter(OrganizationActivity.this, orgsList));
            String searchtext = null;
            try {
                searchtext=URLEncoder.encode(arg0.toString().trim(),"UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String urlStr = "myURL?search="+searchtext;
            new LoadData().execute(urlStr);
            adapter = new LazyAdapter(OrganizationActivity.this, orgsList);
            list.setAdapter(adapter);
        }

    });

    XMLParser parser = new XMLParser();
    String xml = parser.getXmlFromUrl(URL); // getting XML from URL
    Document doc = parser.getDomElement(xml); // getting DOM element

    NodeList nl = doc.getElementsByTagName(KEY_ORGANIZATION);
    // looping through all organization nodes <organization>
    for (int i = 0; i < nl.getLength(); i++) {
        // creating new HashMap
        HashMap<String, String> map = new HashMap<String, String>();
        Element e = (Element) nl.item(i);
        // adding each child node to HashMap key => value
        map.put(KEY_ID, parser.getValue(e, KEY_ID));
        map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
        map.put(KEY_CITY, parser.getValue(e, KEY_CITY));
        map.put(KEY_STATE, parser.getValue(e, KEY_STATE));
        map.put(KEY_IMAGE_URL, parser.getValue(e, KEY_IMAGE_URL));

        // adding HashList to ArrayList
        orgsList.add(map);
    }

    list = (ListView) findViewById(R.id.list);

    View footerView = ((LayoutInflater) this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
            R.layout.listfooter, null, false);
    list.addFooterView(footerView);

    // Getting adapter by passing xml data ArrayList
    adapter = new LazyAdapter(this, orgsList);
    list.setAdapter(adapter);
    list.setOnScrollListener(this);

    // Click event for single list row
    list.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            String name = orgsList.get(position).get(KEY_NAME).toString();
            Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG)
                    .show();
        }
    });

}


private class LoadData extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {

        for (String url : urls) {
            // TODO Auto-generated method stub
            XMLParser parser = new XMLParser();
            String xml = parser.getXmlFromUrl(url); // getting XML from URL
            Document doc = parser.getDomElement(xml); // getting DOM element

            NodeList nl = doc.getElementsByTagName(KEY_ORGANIZATION);
            // looping through all organization nodes <organization>
            for (int i = 0; i < nl.getLength(); i++) {
                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();
                Element e = (Element) nl.item(i);
                // adding each child node to HashMap key => value
                map.put(KEY_ID, parser.getValue(e, KEY_ID));
                map.put(KEY_NAME, parser.getValue(e, KEY_NAME));
                map.put(KEY_CITY, parser.getValue(e, KEY_CITY));
                map.put(KEY_STATE, parser.getValue(e, KEY_STATE));
                map.put(KEY_IMAGE_URL, parser.getValue(e, KEY_IMAGE_URL));

                // adding HashList to ArrayList
                orgsList.add(map);
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        adapter = new LazyAdapter(OrganizationActivity.this, orgsList);
        list.setAdapter(adapter);
        list.setSelectionFromTop(mPos, 0);
    }
}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {

    //Get the visible item position
    mPos=list.getFirstVisiblePosition();

    int lastInScreen = firstVisibleItem + visibleItemCount;

    //Is the bottom item visible & not loading more already? Load more !
    if ((lastInScreen == totalItemCount) && !(loadingMore)) {
        page_no++;
        String pageURL = "myURL?page="
                + page_no;
        new LoadData().execute(pageURL);
    }

}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub

}

}
公共类OrganizationActivity扩展活动实现OnScrollListener{
int itemsPerPage=10;
boolean loadingMore=false;
int-mPos=0;
//所有静态变量
静态最终字符串URL=“some URL”;
静态整型页面_no=1;
//XML节点密钥
静态最终字符串KEY\u ORGANIZATION=“ORGANIZATION”//父节点
静态最终字符串键\u ID=“ID”;
静态最终字符串键\u NAME=“NAME”;
静态最终字符串键\u CITY=“CITY”;
静态最终字符串键\u STATE=“STATE”;
静态最终字符串键\u IMAGE\u URL=“IMAGE”;
列表视图列表;
懒散适配器;
ArrayList orgsList=新建ArrayList();
private EditText filterText=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.main);
filterText=(EditText)findViewById(R.id.search\u box\u et);
filterText.addTextChangedListener(新的TextWatcher()
{
@凌驾
public void PostTextChanged(可编辑arg0){
//TODO自动生成的方法存根
}
@凌驾
更改前的公共无效(字符序列arg0,int arg1,
整数arg2,整数arg3){
//TODO自动生成的方法存根
}
@凌驾
public void onTextChanged(字符序列arg0、int arg1、int arg2、,
int arg3){
//TODO自动生成的方法存根
如果(arg0.length()==0)
{
list.setAdapter(新的LazyAdapter(OrganizationActivity.this,orgsList));
}
list.setAdapter(新的LazyAdapter(OrganizationActivity.this,orgsList));
字符串searchtext=null;
试一试{
searchtext=URLEncoder.encode(arg0.toString().trim(),“UTF-8”);
}捕获(不支持的编码异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
字符串urlStr=“myURL?search=“+searchtext;
new LoadData().execute(urlStr);
adapter=新LazyAdapter(OrganizationActivity.this,orgsList);
list.setAdapter(适配器);
}
});
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(URL);//从URL获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(关键组织);
//循环通过所有组织节点
对于(int i=0;ivalue
put(KEY_ID,parser.getValue(e,KEY_ID));
put(KEY_NAME,parser.getValue(e,KEY_NAME));
map.put(KEY_CITY,parser.getValue(e,KEY_CITY));
put(KEY_STATE,parser.getValue(e,KEY_STATE));
put(KEY\u IMAGE\u URL,parser.getValue(e,KEY\u IMAGE\u URL));
//将哈希列表添加到ArrayList
orgsList.add(地图);
}
list=(ListView)findViewById(R.id.list);
视图页脚视图=((LayoutFlater)此
.getSystemService(Context.LAYOUT\u filler\u SERVICE)).充气(
R.layout.listfooter,null,false);
list.addFooterView(footerView);
//通过传递xml数据ArrayList获取适配器
适配器=新的LazyAdapter(此,orgsList);
list.setAdapter(适配器);
list.setOnScrollListener(此);
//单击单个列表行的事件
list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
String name=orgsList.get(position).get(KEY_name).toString();
Toast.makeText(getApplicationContext(),名称,Toast.LENGTH\u LONG)
.show();
}
});
}
私有类LoadData扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
for(字符串url:url){
//TODO自动生成的方法存根
XMLParser=新的XMLParser();
字符串xml=parser.getXmlFromUrl(url);//从url获取xml
Document doc=parser.getDomeElement(xml);//获取DOM元素
NodeList nl=doc.getElementsByTagName(关键组织);
//循环通过所有组织节点
对于(int i=0;ivalue
put(KEY_ID,parser.getValue(e,KEY_ID));
put(KEY_NAME,parser.getValue(e,KEY_NAME));
map.put(KEY_CITY,parser.getValue(e,KEY_CITY));
put(KEY_STATE,parser.getValue(e,KEY_STATE));
put(KEY\u IMAGE\u URL,parser.getValue(e,KEY\u IMAGE\u URL));
//将哈希列表添加到ArrayList
orgsList.add(地图);
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
适配器=新Laz