如何从数据库中搜索与我们目标相符的数据呢?
我使用的是List view+cursoradapter。现在应该很少有人使用list view了吧,原来打算换换recyclerview来写的,但是recyclerview不支持cursor view啊。暂且先记着,等日后研究出来了再改一改吧。
下面是效果图:
使用navicat进行模糊查找,结果也是一样的
贴出核心代码:
package com.example.geekp.searchfromdatabase;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.example.geekp.searchfromdatabase.dbDao.Config;
import com.example.geekp.searchfromdatabase.dbDao.DBHelper;
import com.example.geekp.searchfromdatabase.dbDao.DBUtil;
import com.example.geekp.searchfromdatabase.dbDao.DBUtilConcreate;
import butterknife.BindView;
import butterknife.ButterKnife;
import static com.example.geekp.searchfromdatabase.GlobeContext.getContext;
public class MainActivity extends AppCompatActivity {
@BindView(R.id.edittext)
EditText mEditText;
@BindView(R.id.imageview)
ImageView mImageView;
@BindView(R.id.textview)
TextView mTextView;
@BindView(R.id.listview)
ListView mListView;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
DBUtil dbUtil= DBUtilConcreate.getInstance();
dbUtil.initDataBase();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
initView();
}
@Override
protected void onDestroy() {
super.onDestroy();
cursor.close();
}
private void initView() {
//设置删除图片的点击事件
mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//把EditText内容设置为空
mEditText.setText("");
//把ListView隐藏
mListView.setVisibility(View.GONE);
}
});
//EditText添加监听
mEditText.addTextChangedListener(new TextWatcher() {
@Override
//文本改变之前执行
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
//文本改变的时候执行
public void onTextChanged(CharSequence s, int start, int before, int count) {
//如果长度为0
if (s.length() == 0) {
//隐藏“删除”图片
mImageView.setVisibility(View.GONE);
} else {//长度不为0
//显示“删除图片”
mImageView.setVisibility(View.VISIBLE);
//显示ListView
showListView();
}
}
//文本改变之后执行
public void afterTextChanged(Editable s) {
}
});
mTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果输入框内容为空,提示请输入搜索内容
if (TextUtils.isEmpty(mEditText.getText().toString().trim())) {
// ToastUtils.showToast(context,"请输入您要搜索的内容");
ToastUtils.showToast(getContext(), "请输入您要搜索的内容");
} else {
//判断cursor是否为空
if (cursor != null) {
int columnCount = cursor.getCount();
if (columnCount == 0) {
// ToastUtils.showToast(context, "对不起,没有你要搜索的内容");
ToastUtils.showToast(getContext(), "对不起,没有你要搜索的内容");
}
}
}
}
});
}
private void showListView() {
mListView.setVisibility(View.VISIBLE);
//获得输入的内容
String str = mEditText.getText().toString().trim();
//获取数据库对象
// MyOpenHelper myOpenHelper = new MyOpenHelper(getContext());
DBHelper dbHelper = new DBHelper(getContext());
final SQLiteDatabase db = dbHelper.getReadableDatabase();
//得到cursor
cursor = db.rawQuery("SELECT QuestionNum as _id,QuestionContent FROM Question WHERE QuestionContent LIKE '%" + str + "%'", null);
SearchViewCursorAdapter adapter = new SearchViewCursorAdapter(getContext(), cursor);
mListView.setAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//把cursor移动到指定行
cursor.moveToPosition(position);
String name = cursor.getString(cursor.getColumnIndex(Config.COLUMN_QUESTIONCONTENT));
String itemname = cursor.getString(cursor.getColumnIndex("_id"));
ToastUtils.showToast(getContext(), "点击了" + name);
}
});
}
}
package com.example.geekp.searchfromdatabase;
import android.content.Context;
import android.database.Cursor;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
import com.example.geekp.searchfromdatabase.dbDao.Config;
/**
* Created by Administrator on 2016/5/21 0021.
*/
public class SearchViewCursorAdapter extends CursorAdapter {
public SearchViewCursorAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
ViewHolder viewHolder = new ViewHolder();
//获取view
View view = View.inflate(context, R.layout.search_listview, null);
//寻找控件
viewHolder.textView = (TextView) view.findViewById(R.id.textview);
view.setTag(viewHolder);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder viewHolder = (ViewHolder) view.getTag();
//从cursor中获取值
String name =cursor.getString(cursor.getColumnIndex("_id"))+cursor.getString(cursor.getColumnIndex(Config.COLUMN_QUESTIONCONTENT));
//把数据设置到控件上面
viewHolder.textView.setText(name);
}
class ViewHolder {
TextView textView;
}
}
需要源码的请移步我的Github