目标效果:
在输入框中输入想要查询的关键字,点击查询可以搜索包含该关键字的成语,并且显示列表依然可以进行收藏,查看成语详细信息。
1.新建SearchActivity.java页面和activity_search.xml页面,activity_search.xml页面放置查询输入框和点击按钮和显示集合。
activity_search.xml页面:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_ling"
android:orientation="vertical"
android:padding="10dp"
tools:context=".SearchActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/etSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3" />
<Button
android:id="@+id/btnSearch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="查询" />
</LinearLayout>
<ListView
android:id="@+id/lvQueryAfter"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
2.新建AnimalQueryDao.java页面,定义查询方法。
AnimalQueryDao.java页面:
package cn.edu.bztc.happyidiom.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cn.edu.bztc.happyidiom.db.DBOpenHelper;
import cn.edu.bztc.happyidiom.entity.Animal;
public class AnimalQueryDao {
private static AnimalQueryDao animalQueryDao;
private SQLiteDatabase db;
/*将构造方法私有化*/
private AnimalQueryDao(Context context){
DBOpenHelper dbHelper=new DBOpenHelper(context);
db=dbHelper.openDatabase();
}
/*获取AnimalDao的实例*/
public synchronized static AnimalQueryDao getInstance(Context context){
if(animalQueryDao==null){
animalQueryDao=new AnimalQueryDao(context);
}
return animalQueryDao;
}
public List<Animal> queryAnimal(String elem){
List<Animal> animals=new ArrayList<Animal>();
/*
* table为查询的表名
* columns为查询后返回的列,为null时则返回所有的列
* selection指定需要返回哪些行的where条件语句,为null表示返回所有行
* selectionArgs表示where语句中表达式的?占位参数列表,参数只能为String型
* groupBy表示对结果集进行分组的group by语句,为null将不对结果集进行分组
* having表示对分组结果集设置条件的having语句,必须配合groupBy参数使用,为null将不对分组结果集设置条件
* orderBy表示对结果集进行排序的orderBy语句,为null将对结果集使用默认的排序(不排序)
*/
Cursor cursor=db.query("animal",null,"name like ?",new String[]{"%"+elem+"%"},null,null,null);
if(cursor.moveToFirst()){
do{
Animal animal=new Animal();
animal.setId(cursor.getInt(cursor.getColumnIndex("_id")));
animal.setName(cursor.getString(cursor.getColumnIndex("name")));
animal.setPronounce(cursor.getString(cursor.getColumnIndex("pronounce")));
animal.setAntonym(cursor.getString(cursor.getColumnIndex("antonym")));
animal.setHomoionym(cursor.getString(cursor.getColumnIndex("homoionym")));
animal.setDerivation(cursor.getString(cursor.getColumnIndex("derivation")));
animal.setExamples(cursor.getString(cursor.getColumnIndex("examples")));
animal.setExplain(cursor.getString(cursor.getColumnIndex("explain")));
animals.add(animal);
}while(cursor.moveToNext());
}
cursor.close();
return animals;
}
}
3.SearchActivity.java页面配置适配器并且编写点击每一项事件,同之前动物类页面相似。
SearchActivity.java页面:
package cn.edu.bztc.happyidion.activity;
import java.util.List;
import cn.edu.bztc.happyidiom.adapter.AnimalAdapter;
import cn.edu.bztc.happyidiom.dao.AnimalQueryDao;
import cn.edu.bztc.happyidiom.entity.Animal;
import cn.edu.bztc.happyidiom.util.DialogUtil;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
public class SearchActivity extends Activity {
private List<Animal> animalList;
private AnimalQueryDao queryDao;
private ListView lvQueryAfter;
private EditText etSearch;
private Button btnSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
etSearch = (EditText) findViewById(R.id.etSearch);
btnSearch = (Button) findViewById(R.id.btnSearch);
lvQueryAfter = (ListView) findViewById(R.id.lvQueryAfter);
btnSearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
search();
}
});
}
private void initAnimals(String elem) {
queryDao=AnimalQueryDao.getInstance(this);
animalList = queryDao.queryAnimal(elem);
}
private void search() {
String elem = etSearch.getText().toString();
initAnimals(elem);
AnimalAdapter animalAdapter = new AnimalAdapter(this,
R.layout.animal_item, animalList);
lvQueryAfter.setAdapter(animalAdapter);
lvQueryAfter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view,
int position, long id) {
Animal animal = animalList.get(position);
/* 定义对话框中提示语句 */
String result = animal.getName() + "\n" + animal.getPronounce()
+ "\n【解释】:" + animal.getExplain() + "\n【近义词】:"
+ animal.getHomoionym() + "\n【反义词】:"
+ animal.getAntonym() + "\n【来源】:"
+ animal.getDerivation() + "\n【示例】:"
+ animal.getExamples();
DialogUtil.showDialog(result, SearchActivity.this);
}
});
}
}
4.在MainActivity.java页面第二十一行左右位置更改为该页面,之前因为没有太多功能,所以每一个页面都用StudyActivity.java页面占位。
addTab("search",R.string.title_search,R.drawable.search,SearchActivity.class);
5.项目源码:
点击打开链接
6.运行就可以显示目标效果了,比较简单。