package com.dotcool.view; import java.util.ArrayList; import java.util.List; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import com.dotcool.R; import com.dotcool.bll.BookPageFactory; import com.dotcool.bll.DbTags; public class SearchActivity extends Activity { private EditText etSearchContent; private ImageButton ibtnSearch; private ListView lvSearchRes; private BookPageFactory pagefactory = BookReadActivity.pagefactory; private Vector<String> pageLines; private List<String> searchResContent; private List<Integer> searchResBeginpositions; private AlertDialog searchDialog; private String searchContent; private Pattern pattern; private Matcher matcher; private int currentBeginPosition; private String resContent; private int resNum; private Handler searchHAndlHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==0) { if(searchResContent.size()>0) { // lvSearchRes.setAdapter(new ArrayAdapter<String>(SearchActivity.this, R.layout.search_res_listview_item, R.id.tvResContent,searchResContent)); lvSearchRes.setAdapter(new ArrayAdapter<String>(SearchActivity.this, android.R.layout.simple_list_item_1,searchResContent)); } else { new AlertDialog.Builder(SearchActivity.this).setTitle("提示").setMessage("没有找到符合查询条件的结果!").setPositiveButton("确定", null).show(); } } else if(msg.what==1) { searchDialog.setMessage("正在搜索,请稍后...\n已找到"+resNum+"条结果\n"+resContent); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.search_view); etSearchContent = (EditText)findViewById(R.id.etSearchContent); ibtnSearch = (ImageButton)findViewById(R.id.ibtnSearch); lvSearchRes = (ListView)findViewById(R.id.lvSearchRes); lvSearchRes.setFocusable(true); lvSearchRes.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(SearchActivity.this,BookReadActivity.class); intent.putExtra(DbTags.FIELD_BOOK_PROGRESS, "begin"); intent.putExtra("begin", searchResBeginpositions.get(position)); intent.putExtra(DbTags.FIELD_BOOK_PATH, getIntent().getExtras().getString(DbTags.FIELD_BOOK_PATH)); startActivity(intent); } }); ibtnSearch.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { pagefactory.setM_mbBufBegin(0); pagefactory.setM_islastPage(false); searchResContent = new ArrayList<String>(); searchResBeginpositions = new ArrayList<Integer>(); searchDialog = new AlertDialog.Builder(SearchActivity.this).create(); searchDialog.setMessage("正在搜索,请稍后..."); searchDialog.show(); searchContent = etSearchContent.getText().toString(); pattern = Pattern.compile(searchContent); new Thread(new Runnable() { public void run() { System.out.println("hello"); pagefactory.pageUp(); while(!pagefactory.isM_islastPage()) { pageLines= pagefactory.pageDown(); if(pageLines.size()>0) { for(int i=0;i<pageLines.size();i++) { matcher = pattern.matcher(pageLines.get(i)); if(i==0) currentBeginPosition+= pageLines.get(i).length(); else currentBeginPosition+= pageLines.get(i-1).length()+pageLines.get(i).length(); if(matcher.find()) { searchResContent.add(pageLines.get(i)); searchResBeginpositions.add(currentBeginPosition); System.out.println(i+pageLines.get(i)); resContent = pageLines.get(i); resNum++; searchHAndlHandler.sendEmptyMessage(1); } } } else { pagefactory.setM_islastPage(true); searchDialog.dismiss(); searchHAndlHandler.sendEmptyMessage(0); break; } } } }).start(); } }); } }