Android小程序-乐学成语查询(二)

这篇博客介绍如何在Android应用中实现成语查询功能。用户可以输入关键字,点击查询后,程序会显示包含该关键字的成语列表。列表支持成语收藏和详细信息查看。文章涉及搜索、不精确搜索及UI布局设计。
摘要由CSDN通过智能技术生成

目标效果:

在输入框中输入想要查询的关键字,点击查询可以搜索包含该关键字的成语,并且显示列表依然可以进行收藏,查看成语详细信息。


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.运行就可以显示目标效果了,比较简单。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值