我想使用edittext从数据库中搜索名称 公共类SearchActivity扩展活动{ 私人编辑文本搜索按名称搜索; 私有数组列表数组; 专用阵列适配器; 私有列表视图列表视图; sqlitedb数据库; 光标; 私人DBHelper DBHelper; 个人贷款p=新的个人贷款(); @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u search); 按名称搜索(EditText)findViewById(R.id.SearchName); 数组=新的ArrayList(); listView=(listView)findViewById(R.id.listView1); adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组); setAdapter(适配器); getData(); } 私有void getData(){ DBHelper=newdbhelper(this); db=helper.getReadableDatabase(); 字符串列[]=新字符串[]{ID、名称、开始日期、结束日期、贷款金额、利率、最终金额}; cursor=db.query(false,LOAN_表,列,null,null,null,null,null,null); 如果(!cursor.isAfterLast()){ cursor.moveToFirst(); 而(!cursor.isAfterLast()){ p=新的个人贷款(); p、 id=cursor.getInt(0); p、 name=cursor.getString(1); p、 sd=cursor.getString(2); p、 ed=cursor.getString(3); p、 la=游标。getDouble(4); p、 roi=cursor.getFloat(5); p、 amt=cursor.getString(6); 数组。添加(p); cursor.moveToNext(); 按名称搜索。addTextChangedListener(新的TextWatcher(){ public void onTextChanged(字符序列、int start、int before、int count){ //TODO自动生成的方法存根 } 更改前的公共无效(字符序列、整数开始、整数计数、, 整数后){ //TODO自动生成的方法存根 } 公共无效后文本已更改(可编辑){ //TODO自动生成的方法存根 s=按名称搜索。getText(); p、 name=s.toString(); adapter.getFilter().filter(s.toString()); } }); } cursor.close(); db.close(); adapter.notifyDataSetChanged(); } } @凌驾 public void onBackPressed(){ //TODO自动生成的方法存根 意图i=新意图(SearchActivity.this,FirstActivity.class); 星触觉(i); } }
这是我的更新代码,它过滤了数据,但使用的是最后一个字段,而不是名称字段。。。它使用了最后一个字段进行过滤,如果有人知道答案,请共享试试这个我想使用edittext从数据库中搜索名称 公共类SearchActivity扩展活动{ 私人编辑文本搜索按名称搜索; 私有数组列表数组; 专用阵列适配器; 私有列表视图列表视图; sqlitedb数据库; 光标; 私人DBHelper DBHelper; 个人贷款p=新的个人贷款(); @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity\u search); 按名称搜索(EditText)findViewById(R.id.SearchName); 数组=新的ArrayList(); listView=(listView)findViewById(R.id.listView1); adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组); setAdapter(适配器); getData(); } 私有void getData(){ DBHelper=newdbhelper(this); db=helper.getReadableDatabase(); 字符串列[]=新字符串[]{ID、名称、开始日期、结束日期、贷款金额、利率、最终金额}; cursor=db.query(false,LOAN_表,列,null,null,null,null,null,null); 如果(!cursor.isAfterLast()){ cursor.moveToFirst(); 而(!cursor.isAfterLast()){ p=新的个人贷款(); p、 id=cursor.getInt(0); p、 name=cursor.getString(1); p、 sd=cursor.getString(2); p、 ed=cursor.getString(3); p、 la=游标。getDouble(4); p、 roi=cursor.getFloat(5); p、 amt=cursor.getString(6); 数组。添加(p); cursor.moveToNext(); 按名称搜索。addTextChangedListener(新的TextWatcher(){ public void onTextChanged(字符序列、int start、int before、int count){ //TODO自动生成的方法存根 } 更改前的公共无效(字符序列、整数开始、整数计数、, 整数后){ //TODO自动生成的方法存根 } 公共无效后文本已更改(可编辑){ //TODO自动生成的方法存根 s=按名称搜索。getText(); p、 name=s.toString(); adapter.getFilter().filter(s.toString()); } }); } cursor.close(); db.close(); adapter.notifyDataSetChanged(); } } @凌驾 public void onBackPressed(){ //TODO自动生成的方法存根 意图i=新意图(SearchActivity.this,FirstActivity.class); 星触觉(i); } },android,android-edittext,Android,Android Edittext,这是我的更新代码,它过滤了数据,但使用的是最后一个字段,而不是名称字段。。。它使用了最后一个字段进行过滤,如果有人知道答案,请共享试试这个 public class SearchActivity extends Activity { private EditText Search_By_Name; private ArrayList<Personal_loan> array; private ArrayAdapter<Personal_loan>
public class SearchActivity extends Activity {
private EditText Search_By_Name;
private ArrayList<Personal_loan> array;
private ArrayAdapter<Personal_loan> adapter;
private ListView listView;
SQLiteDatabase db;
Cursor cursor ;
private DBHelper dbHelper;
Personal_loan p = new Personal_loan();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
Search_By_Name = (EditText)findViewById(R.id.SearchName);
array = new ArrayList<Personal_loan>();
listView = (ListView) findViewById(R.id.listView1);
adapter = new ArrayAdapter<Personal_loan>(this, android.R.layout.simple_list_item_1, array);
listView.setAdapter(adapter);
getData();
}
private void getData() {
DBHelper helper = new DBHelper(this);
db = helper.getReadableDatabase();
String columns[] = new String[] {ID,Name,START_DATE,END_DATE,LOAN_AMOUNT,RATE_OF_INTEREST,FINAL_AMOUNT};
cursor = db.query( false, LOAN_TABLE, columns, null, null, null, null, null, null, null);
if (!cursor.isAfterLast()) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
p = new Personal_loan();
p.id = cursor.getInt(0);
p.name = cursor.getString(1);
p.sd = cursor.getString(2);
p.ed = cursor.getString(3);
p.la = cursor.getDouble(4);
p.roi = cursor.getFloat(5);
p.amt=cursor.getString(6);
array.add(p);
cursor.moveToNext();
Search_By_Name.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
s=Search_By_Name.getText();
p.name=s.toString();
adapter.getFilter().filter(s.toString());
}
});
}
cursor.close();
db.close();
adapter.notifyDataSetChanged();
}
}
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
Intent i=new Intent(SearchActivity.this,FirstActivity.class);
startActivity(i);
}
}
Reference能否显示您的logcat?应用程序需要一个事件来获取用户输入的EditText值。因此,当从按钮单击上的EditText检索值时?您在哪里读取EditText值?您如何解释它?Priyanka,只有在活动创建中,当EditText为空时,才调用
getData()
。您应该实现EditText的按钮或onTextChanged()
方法,以便在getData()
方法中搜索其内容(如果该方法不为空)。顺便说一下,您应该将搜索到的字符串作为参数传递,并使用WHERE条件在db中搜索该字符串。并且不依赖于绝对列位置。
Search_By_Name .addTextChangedListener(new TextWatcher() {
@Override public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
String text = search.getText().toString().toLowerCase(Locale.getDefault()); //
Your_Activity.this.adapter.filter(text); }
@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
} });