[英]How to retrieve database values based on user clicks
I have made a database film app, which allows the user to search for a film. 我制作了一个数据库电影应用程序,该应用程序允许用户搜索电影。 The results will then display in a ScrollView. 结果将显示在ScrollView中。 Once the search results are returned, I want the user to be able to click on a film, which will lead to a new activity with the full details of the film. 返回搜索结果后,我希望用户能够单击电影,这将导致具有该电影全部详细信息的新活动。 How would I go about doing this? 我将如何去做呢?
The clicks will all lead to one activity, but I need different details to display depending on the film clicked. 这些点击都将导致一个活动,但是我需要根据所单击的影片显示不同的详细信息。 I have 20 films in my database in total. 我的数据库中总共有20部电影。
Search function on MainActivity: MainActivity上的搜索功能:
public void search(View v){
EditText search = (EditText)findViewById(R.id.edtSearch);
String searchresult = "%" + search.getText().toString() + "%";
db = new DbHelper(this).getReadableDatabase();
String[] tblColumns = {"*"};
String where = "film LIKE ? OR actor LIKE ? OR actor2 LIKE ? OR director LIKE ?";
String[] args = {searchresult, searchresult, searchresult, searchresult};
Cursor results = db.query("FILMTABLE", tblColumns, where, args, null, null, null);
film(results);
}
public void film (Cursor c){
c.moveToFirst();
int titleint = c.getColumnIndex("film");
int id= c.getColumnIndex("id");
String title = c.getString(titleint);
int filmID = c.getInt(id);
TextView txt = new TextView(getApplicationContext());
txt.setId(filmID);
txt.setText(title);
txt.setTextColor(Color.BLACK);
txt.setTextSize(15);
txt.setClickable(true);
txt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), MainActivity4.class);
startActivity(intent);
}
});
ScrollView scrollView = (ScrollView)findViewById(R.id.scrolLView);
scrollView.addView(txt);
}
DatabaseHelper: DatabaseHelper:
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DbHelper extends SQLiteOpenHelper {
private static final String ID = "id";
private static final String FILM = "film";
private static final String ACTOR = "actor";
private static final String ACTOR2 = "actor2";
private static final String DIRECTOR = "director";
private static final String DESCRIPTION = "description";
private static final String TABLE_NAME = "FILMTABLE";
private static final String DATABASE_NAME = "filmdatabase3";
private static final int DATABASE_VERSION = 1;
private static final boolean FAVOURITE = false;
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" +
ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
FILM + " TEXT NOT NULL, " +
ACTOR + " TEXT NOT NULL, " +
ACTOR2 + " TEXT NOT NULL, " +
DIRECTOR + " TEXT NOT NULL, " +
FAVOURITE + " BOOLEAN, " +
DESCRIPTION + " TEXT NOT NULL);"
);
Cursor countRows = db.rawQuery("SELECT count(*) FROM FILMTABLE", null);
countRows.moveToFirst();
int NumRows = countRows.getInt(0);
countRows.close();
if (NumRows == 0) {
ContentValues values = new ContentValues();
values.put("film", "Gone Girl");
values.put("actor", "Ben Affleck");
values.put("actor2", "Rosamund Pike");
values.put("director", "David Fincher");
values.put("description", "description");
db.insert("FILMTABLE", null, values);
values.clear();
values.put("film", "The Hobbit");
values.put("actor", "Martin Freeman");
values.put("actor2", "Elijah Wood");
values.put("director", "Peter Jackson");
values.put("description", "description");
db.insert("FILMTABLE", null, values);
values.clear();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}
}
When you start the detail activity, put the id of the film to the Intent you are creating. 当开始细节活动时,将影片的ID放入要创建的Intent中。
Intent intent = new Intent(getApplicationContext(), MainActivity4.class);
intent.putExtra("FILM_ID_KEY", getSelectedFilmId());
startActivity(intent);
Or make your film POJO parcelable and again put that in your intent via putExtra method. 或将电影POJO设置为可拆分 ,然后通过putExtra方法再次将其放入您的意图。
After that, in your MainActivity4 get these values in onCreate with getIntent method. 之后,在您的MainActivity4中,使用getIntent方法在onCreate中获取这些值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.