Вы получаете идентификатор и добавляете его к Intent в качестве дополнительного, используя соответствующий (long) putExtra с подходящим ключом (первый параметр).
В другом действии вы получаете Intent, а затем получаете значение из Extra, используя getLongExtra , используя тот же ключ (первый параметр), отмечая, что значением по умолчанию должно быть значение (например, -1) это не будет идентификатором.
Рабочий пример
Ниже приведен рабочий пример: -
Помощник по базам данных DBOpenHelper.java
public class DBOpenHelper extends SQLiteOpenHelper {
public static final String DBNAME = "notes.db";
public static final int DBVERSION = 1;
public static final String TBL_NOTE = "note_table";
public static final String COL_NOTE_ID = BaseColumns._ID;
public static final String COL_NOTE_TEXT = "note_text";
private final String create_table = "CREATE TABLE IF NOT EXISTS " + TBL_NOTE + "(" +
COL_NOTE_ID + " INTEGER PRIMARY KEY, " +
COL_NOTE_TEXT + " TEXT " +
")";
private static final String drop_table = "DROP TABLE IF EXISTS " + TBL_NOTE;
public DBOpenHelper(Context context) {
super(context, DBNAME, null, DBVERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(create_table);
}
public void onUpgrade(SQLiteDatabase db, int version_old, int version_new) { }
public long addNote(String note) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("NOTE_TEXT",note);
return db.insert("note_table",null,cv);
}
public Cursor getAllNotes() {
SQLiteDatabase db = this.getWritableDatabase();
return db.query(TBL_NOTE,null,null,null,null,null,null);
}
}
- Экземпляр этого экземпляра используется для:
- откройте базу данных (в примере она называется notes.db ), она создаст базу данных, если она не существует.
- добавить данные с помощью метода addNote .
- возвращает курсор, содержащий все заметки, с помощью метода getAllNotes .
Начальная активность MainActivity.java: -
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private SimpleCursorAdapter MSCA;
private Cursor mCsr;
private DBOpenHelper mDBHelper;
public static final String INTENTEXTRAKEY_NOTE_ID = "iek_noteid";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDBHelper = new DBOpenHelper(this);
mListView = findViewById(R.id.listView);
addSomeTestData(); //Adds a row every time the App is run (for testing)
ViewData();
}
private void ViewData(){
mCsr = mDBHelper.getAllNotes();
if (MSCA == null) {
MSCA = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
mCsr,
new String[]{DBOpenHelper.COL_NOTE_TEXT},
new int[]{android.R.id.text1},
0);
mListView.setAdapter(MSCA);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent i = new Intent(MainActivity.this,OtherActivity.class);
i.putExtra(INTENTEXTRAKEY_NOTE_ID,id);
startActivity(i);
}
});
} else {
MSCA.swapCursor(mCsr);
}
}
private void addSomeTestData() {
if(DatabaseUtils.queryNumEntries(mDBHelper.getWritableDatabase(),DBOpenHelper.TBL_NOTE) < 1) {
mDBHelper.addNote("My Note");
mDBHelper.addNote("Another Note");
mDBHelper.addNote("Yet Another Note");
mDBHelper.addNote("And so on.");
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mCsr.close();
}
@Override
public void onResume()
{
super.onResume();
ViewData();
}
}
Эта деятельность: -
- Добавляет некоторые заметки в базу данных (если их еще нет)
- Список всех заметок в базе данных
- устанавливает onItemClickListener для вызова действия OtherActivity , передавая id через IntenExtra.
Примечания
CursorAdpater (SimpleCursorAdapter) в этом случае идеально подходит, поскольку id передается слушателю в метод onItemClick . ПРИМЕЧАНИЕ для этого требуется столбец с конкретным именем _id (согласно BaseColumns._ID ), а столбец является псевдонимом rowid колонка.
Метод onDestroy был переопределен, чтобы закрыть Курсор, когда закончите с ним (то есть, когда действие будет уничтожено). Это не так важно для начальной активности, поскольку ее время жизни обычно для всего приложения (более важно закрыть курсор в иерархически более низких операциях).
Метод ViewData управляет одним экземпляром адаптера (т. Е. Создает его только тогда, когда он не был создан), а также обновляет ListView. Следовательно, почему он вызывается в переопределенном методе onResume . то есть другое действие может добавить. удалить или обновить базу данных, чтобы ListView обновлялся при возврате.
Действие, вызванное из начального действия OtherActivity.java
public class OtherActivity extends AppCompatActivity {
TextView mNoteId;
Button mDone;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
mNoteId = this.findViewById(R.id.noteid);
mDone = this.findViewById(R.id.done);
mDone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Intent i = this.getIntent();
long id = i.getLongExtra(MainActivity.INTENTEXTRAKEY_NOTE_ID,-1);
mNoteId.setText(String.valueOf(id));
}
}
- Эта деятельность: -
- устанавливает onClickListener кнопки для возврата к действию вызова / вызова.
- извлекает id из дополнительных сведений о намерениях, переданных действию из вызывающего действия, и устанавливает noteid TextView с извлеченным значением (переданное id ) .
Результат
Первоначально: -
Нажав еще одно примечание: -
- Как Еще одно примечание было добавлено третье примечание, оно id равно 3 .