@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mList = (ListView) this.findViewById(R.id.list); mNotedb = new NoteDb(this); dbreader = mNotedb.getReadableDatabase(); setupSearchView(); mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { cursor.moveToPosition(i); Intent intent = new Intent(MainActivity.this, Show.class); intent.putExtra(NoteDb.ID,cursor.getInt(cursor.getColumnIndex(NoteDb.ID))); intent.putExtra(NoteDb.CONTENT,cursor.getString(cursor.getColumnIndex(NoteDb.CONTENT))); intent.putExtra(NoteDb.TIME,cursor.getString(cursor.getColumnIndex(NoteDb.TIME))); startActivity(intent); } }); }
时间: 2024-02-14 19:05:49 浏览: 115
根据你提供的代码,我猜测你在使用一个名为 `SearchView` 的控件来实现搜索功能,并将其添加到了你的 `MainActivity` 中。但是可能出现了一些问题导致搜索结果不能单独显示。
为了更好地理解你的问题,我需要看一下你的 `setupSearchView()` 方法的实现代码,以及你的搜索功能是如何实现的。请提供更多代码或者上下文信息,这样我才能更好地帮助你解决问题。
相关问题
public class MainActivity extends AppCompatActivity { private Button mButton; private ListView mList; private Intent mIntent; private MyAdapter mAdapter; private NoteDb mNotedb; private Cursor cursor; private SQLiteDatabase dbreader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mList = (ListView) this.findViewById(R.id.list); mNotedb = new NoteDb(this); dbreader = mNotedb.getReadableDatabase(); mList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { cursor.moveToPosition(i); Intent intent = new Intent(MainActivity.this, Show.class); intent.putExtra(NoteDb.ID,cursor.getInt(cursor.getColumnIndex(NoteDb.ID))); intent.putExtra(NoteDb.CONTENT,cursor.getString(cursor.getColumnIndex(NoteDb.CONTENT))); intent.putExtra(NoteDb.TIME,cursor.getString(cursor.getColumnIndex(NoteDb.TIME))); startActivity(intent); } }); } public void add(View v) { mIntent = new Intent(MainActivity.this, Add.class); startActivity(mIntent); } public void selectDb() { cursor = dbreader.query (NoteDb.TABLE_NAME,null,null,null,null,null,null); mAdapter = new MyAdapter(this,cursor); mList.setAdapter(mAdapter); } @Override protected void onResume() { super.onResume(); selectDb(); }
这段代码是一个 Android 应用程序的主活动(MainActivity),它包含一个 ListView 控件,用于显示数据库中的数据。这个应用程序是一个笔记应用,用户可以添加、编辑和删除笔记,MainActivity 中的 selectDb() 方法用于查询数据库中的笔记数据,并将其显示在 ListView 控件中。当用户点击 ListView 中的某个笔记时,通过 onItemClick() 方法获取该笔记的 ID、内容和时间,然后将这些数据传递给 Show 活动,并启动 Show 活动以显示该笔记的详细信息。add() 方法用于启动 Add 活动以添加新笔记。onResume() 方法用于在应用程序恢复时重新加载笔记数据。
移动应用开发:建立数据库“dbTest.db”以及“tb_person”,包含字段:id name age gender height 要求实现对学生以上信息的增删改查,写出相应的xml和activity文件
好的,我可以为您提供一个简单的实现方案。以下是步骤和代码示例:
1. 创建数据库和表
在 Android Studio 中创建一个新项目。然后在项目的 `app/src/main/` 目录下创建一个 `assets/` 文件夹,并在此文件夹下创建一个名为 `dbTest.db` 的 SQLite 数据库文件。在该数据库中创建一个名为 `tb_person` 的表,包含 `id`、`name`、`age`、`gender` 和 `height` 这五个字段。
2. 编写数据库操作类
创建一个名为 `DatabaseHelper` 的类,用于连接数据库和进行增删改查操作。以下是该类的代码示例:
```java
public class DatabaseHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "dbTest.db";
private static final int DB_VERSION = 1;
private static final String TABLE_NAME = "tb_person";
private static final String ID = "id";
private static final String NAME = "name";
private static final String AGE = "age";
private static final String GENDER = "gender";
private static final String HEIGHT = "height";
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABLE_NAME + " ("
+ ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ NAME + " TEXT, "
+ AGE + " INTEGER, "
+ GENDER + " TEXT, "
+ HEIGHT + " REAL)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
public void insert(Person person) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(NAME, person.getName());
values.put(AGE, person.getAge());
values.put(GENDER, person.getGender());
values.put(HEIGHT, person.getHeight());
db.insert(TABLE_NAME, null, values);
db.close();
}
public void update(Person person) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(NAME, person.getName());
values.put(AGE, person.getAge());
values.put(GENDER, person.getGender());
values.put(HEIGHT, person.getHeight());
String whereClause = ID + "=?";
String[] whereArgs = {String.valueOf(person.getId())};
db.update(TABLE_NAME, values, whereClause, whereArgs);
db.close();
}
public void delete(int id) {
SQLiteDatabase db = this.getWritableDatabase();
String whereClause = ID + "=?";
String[] whereArgs = {String.valueOf(id)};
db.delete(TABLE_NAME, whereClause, whereArgs);
db.close();
}
public List<Person> queryAll() {
SQLiteDatabase db = this.getReadableDatabase();
List<Person> list = new ArrayList<>();
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex(ID));
String name = cursor.getString(cursor.getColumnIndex(NAME));
int age = cursor.getInt(cursor.getColumnIndex(AGE));
String gender = cursor.getString(cursor.getColumnIndex(GENDER));
float height = cursor.getFloat(cursor.getColumnIndex(HEIGHT));
Person person = new Person(id, name, age, gender, height);
list.add(person);
}
cursor.close();
db.close();
return list;
}
}
```
在该类中,我们继承了 `SQLiteOpenHelper` 类,并实现了 `onCreate`、`onUpgrade` 方法用于创建数据库和升级数据库。同时,我们还实现了 `insert`、`update`、`delete` 和 `queryAll` 方法用于增删改查操作。
3. 编写实体类
创建一个名为 `Person` 的类,用于表示一个学生的信息。该类包含 `id`、`name`、`age`、`gender` 和 `height` 这五个属性,并且编写相应的 getter 和 setter 方法。以下是该类的代码示例:
```java
public class Person {
private int id;
private String name;
private int age;
private String gender;
private float height;
public Person() {
}
public Person(int id, String name, int age, String gender, float height) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.height = height;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
}
```
4. 编写布局文件和 Activity 类
在 `activity_main.xml` 文件中,创建一个界面,包括输入框和按钮,用于实现对数据库的增删改查操作。以下是该界面的代码示例:
```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<EditText
android:id="@+id/edit_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Name"/>
<EditText
android:id="@+id/edit_age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Age"/>
<EditText
android:id="@+id/edit_gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Gender"/>
<EditText
android:id="@+id/edit_height"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Height"/>
<Button
android:id="@+id/btn_insert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert"/>
<Button
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Update"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete"/>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
```
在 `MainActivity.java` 文件中,我们首先获取界面上的输入框和按钮,并为按钮设置点击事件。当点击按钮时,我们调用相应的 CRUD 操作方法,并将结果展示在界面上。以下是该类的代码示例:
```java
public class MainActivity extends AppCompatActivity {
private EditText mEditName;
private EditText mEditAge;
private EditText mEditGender;
private EditText mEditHeight;
private Button mBtnInsert;
private Button mBtnUpdate;
private Button mBtnDelete;
private ListView mListView;
private ArrayAdapter<Person> mAdapter;
private List<Person> mList;
private DatabaseHelper mDatabaseHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mEditName = findViewById(R.id.edit_name);
mEditAge = findViewById(R.id.edit_age);
mEditGender = findViewById(R.id.edit_gender);
mEditHeight = findViewById(R.id.edit_height);
mBtnInsert = findViewById(R.id.btn_insert);
mBtnUpdate = findViewById(R.id.btn_update);
mBtnDelete = findViewById(R.id.btn_delete);
mListView = findViewById(R.id.list_view);
mDatabaseHelper = new DatabaseHelper(this);
mList = mDatabaseHelper.queryAll();
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mList);
mListView.setAdapter(mAdapter);
mBtnInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mEditName.getText().toString();
int age = Integer.parseInt(mEditAge.getText().toString());
String gender = mEditGender.getText().toString();
float height = Float.parseFloat(mEditHeight.getText().toString());
Person person = new Person(0, name, age, gender, height);
mDatabaseHelper.insert(person);
mList.clear();
mList.addAll(mDatabaseHelper.queryAll());
mAdapter.notifyDataSetChanged();
}
});
mBtnUpdate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mEditName.getText().toString();
int age = Integer.parseInt(mEditAge.getText().toString());
String gender = mEditGender.getText().toString();
float height = Float.parseFloat(mEditHeight.getText().toString());
Person person = new Person(mList.get(mListView.getCheckedItemPosition()).getId(), name, age, gender, height);
mDatabaseHelper.update(person);
mList.clear();
mList.addAll(mDatabaseHelper.queryAll());
mAdapter.notifyDataSetChanged();
}
});
mBtnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = mList.get(mListView.getCheckedItemPosition()).getId();
mDatabaseHelper.delete(id);
mList.clear();
mList.addAll(mDatabaseHelper.queryAll());
mAdapter.notifyDataSetChanged();
}
});
}
}
```
在该类中,我们首先获取界面上的输入框和按钮,并为按钮设置点击事件。当点击按钮时,我们调用相应的 CRUD 操作方法,并将结果展示在界面上。其中,我们使用了一个 `ListView` 来展示学生的信息列表。
需要注意的是,我们查询数据库和更新界面的操作都是在子线程中进行的,以避免出现 ANR 的情况。
以上就是一个简单的增删改查示例,希望能够帮助您完成此项目。
阅读全文