Android 如何使用行ID将数据加载到详细信息活动中?
我使用android room架构构建了一个room数据库。现在,从一个recyclerview片段开始,当用户点击其中一个回收项目时,应用程序会带他详细了解该项目的活动 现在,我使用以下代码从片段发送项目ID:Android 如何使用行ID将数据加载到详细信息活动中?,android,database,repository,android-room,dao,Android,Database,Repository,Android Room,Dao,我使用android room架构构建了一个room数据库。现在,从一个recyclerview片段开始,当用户点击其中一个回收项目时,应用程序会带他详细了解该项目的活动 现在,我使用以下代码从片段发送项目ID: holder.parentLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {
holder.parentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(mContext.getContext(), MaterialItemView.class);
intent.putExtra("ID", String.valueOf(mMaterial.get(position).getId()));
mContext.startActivity(intent);
}
它工作是因为ID到达了另一边
我需要帮助来使用ID解析或加载此数据到详细信息活动中。
这是我的详细活动:
TextView mMaterialName;
TextView mMaterialBrand;
private RawMaterialViewModel mMaterialViewModel;
private List<RawMaterialsEntity> mMaterial; // Cached copy of Materials
RawMaterialsEntity rawMaterialsEntity;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.material_item_view);
mMaterialName = findViewById(R.id.material_name_view);
mMaterialBrand = findViewById(R.id.material_brand_view);
mMaterialViewModel = new ViewModelProvider(this).get(RawMaterialViewModel.class);
// Update the cached copy of the words in the adapter.
Intent intent = getIntent();
if (intent != null && intent.hasExtra("ID")) {
int id = intent.getIntExtra("ID", -1);
// TODO: get material details based on material id
} else {
// ...
}
TextView材质名称;
TextView材料品牌;
私人原料模型-材料模型;
私人名单材料;//材料的缓存副本
原始材料实体原始材料实体;
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.material\u item\u视图);
mMaterialName=findViewById(R.id.material\u name\u视图);
M材料品牌=findViewById(R.id.材料品牌视图);
mMaterialViewModel=新的ViewModelProvider(this.get)(RawMaterialViewModel.class);
//更新适配器中单词的缓存副本。
Intent=getIntent();
if(intent!=null&&intent.hasExtra(“ID”)){
int id=intent.getIntExtra(“id”,-1);
//TODO:根据物料id获取物料详细信息
}否则{
// ...
}
这是我的刀:
@Dao
public interface RawMaterialsDao {
@Insert
void insertMaterial(RawMaterialsEntity rawMaterialsEntity);
@Query("DELETE FROM raw_materials")
void deleteAll();
@Query("SELECT * FROM raw_materials WHERE material_name = :name")
List<RawMaterialsEntity> findMaterial(String name);
@Query("SELECT * FROM raw_materials WHERE id = :id")
List<RawMaterialsEntity> findMaterialById(int id);
@Query("DELETE FROM raw_materials WHERE material_name = :name")
void deleteMaterial(String name);
@Query("SELECT * from raw_materials")
LiveData<List<RawMaterialsEntity>> getAllMaterials();
@Query ("UPDATE raw_materials SET cost_per_gm = material_cost/material_weight")
void divide();
@Query ("UPDATE raw_materials SET total_cost = material_cost*material_quantity")
void totalCost();
}
@Dao
公共接口RawMaterialsDao{
@插入
作废插入材料(RawMaterialsEntity RawMaterialsEntity);
@查询(“从原材料中删除”)
void deleteAll();
@查询(“从原材料中选择*,其中材料名称=:名称”)
列表findMaterial(字符串名称);
@查询(“从id=:id的原材料中选择*)
列出findMaterialById(int id);
@查询(“从原材料中删除,其中材料名称=:名称”)
无效删除材料(字符串名称);
@查询(“从原材料中选择*)
LiveData getAllMaterials();
@查询(“更新原材料设置成本每总经理=材料成本/材料重量”)
无效分割();
@查询(“更新原材料设置总成本=材料成本*材料数量”)
无效总成本();
}
我的存储库:
public class ChefsBoxRepository {
private MutableLiveData<List<RawMaterialsEntity>> searchResults = new MutableLiveData<>();
private LiveData<List<RawMaterialsEntity>> allMaterials;
private RawMaterialsDao rawMaterialDao;
//public constructor
public ChefsBoxRepository(Application application) {
ChefsBoxRoomDataBase db;
db = ChefsBoxRoomDataBase.getDatabase(application);
rawMaterialDao = db.rawMaterialDao();
allMaterials = rawMaterialDao.getAllMaterials();
}
//used by the view model
public LiveData<List<RawMaterialsEntity>> getAllMaterials() {
return allMaterials;
}
//used by the view model
public MutableLiveData<List<RawMaterialsEntity>> getSearchResults() {
return searchResults;
}
public void insertMaterial(RawMaterialsEntity newMaterial) {
InsertAsyncTask task = new InsertAsyncTask(rawMaterialDao);
task.execute(newMaterial);
}
public void costPerGm(){
CostPerGmAsyncTask task = new CostPerGmAsyncTask(rawMaterialDao);
task.execute();
}
public void totalCost(){
TotalCostAsyncTask task = new TotalCostAsyncTask(rawMaterialDao);
task.execute();
}
public void deleteMaterial(String name) {
DeleteAsyncTask task = new DeleteAsyncTask(rawMaterialDao);
task.execute(name);
}
public void findMaterial(String name) {
QueryAsyncTask task = new QueryAsyncTask(rawMaterialDao);
task.delegate = this;
task.execute(name);
}
public void findMaterialById(int id) {
QueryAsyncTask2 task = new QueryAsyncTask2(rawMaterialDao);
task.delegate = this;
task.execute(id);
}
private void asyncFinished(List<RawMaterialsEntity> results) {
searchResults.setValue(results);
}
//QueryAsyncTask for calling items from database
private static class QueryAsyncTask extends
AsyncTask<String, Void, List<RawMaterialsEntity>> {
private RawMaterialsDao asyncTaskDao;
private ChefsBoxRepository delegate = null;
QueryAsyncTask(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected List<RawMaterialsEntity> doInBackground(final String... params) {
return asyncTaskDao.findMaterial(params[0]);
}
@Override
protected void onPostExecute(List<RawMaterialsEntity> result) {
delegate.asyncFinished(result);
}
}
//QueryAsyncTask for calling items from database
private static class QueryAsyncTask2 extends
AsyncTask<Integer, Void, List<RawMaterialsEntity>> {
private RawMaterialsDao asyncTaskDao;
private ChefsBoxRepository delegate = null;
QueryAsyncTask2(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected List<RawMaterialsEntity> doInBackground(final Integer... params) {
return asyncTaskDao.findMaterialById(params[0]);
}
@Override
protected void onPostExecute(List<RawMaterialsEntity> result) {
delegate.asyncFinished(result);
}
}
//InsertAsyncTask for inserting items to the database
private static class InsertAsyncTask extends AsyncTask<RawMaterialsEntity, Void, Void> {
private RawMaterialsDao asyncTaskDao;
InsertAsyncTask(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected Void doInBackground(final RawMaterialsEntity... params) {
asyncTaskDao.insertMaterial(params[0]);
return null;
}
}
//DeleteAsyncTask for deleting items from the database
private static class DeleteAsyncTask extends AsyncTask<String, Void, Void> {
private RawMaterialsDao asyncTaskDao;
DeleteAsyncTask(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected Void doInBackground(final String... params) {
asyncTaskDao.deleteMaterial(params[0]);
return null;
}
}
//CostPerGmAsyncTask for dividing the materialCost on the materialWeight
private static class CostPerGmAsyncTask extends AsyncTask<Void, Void, Void> {
private RawMaterialsDao asyncTaskDao;
CostPerGmAsyncTask(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected Void doInBackground(Void... voids) {
asyncTaskDao.divide();
return null;
}
}
//TotalCostAsyncTask for dividing the materialCost on the materialWeight
private static class TotalCostAsyncTask extends AsyncTask<Void, Void, Void> {
private RawMaterialsDao asyncTaskDao;
TotalCostAsyncTask(RawMaterialsDao dao) {
asyncTaskDao = dao;
}
@Override
protected Void doInBackground(Void... voids) {
asyncTaskDao.totalCost();
return null;
}
}
}
public LiveData<RawMaterialsEntity> findMaterialById(int id) {
return rawMaterialDao.findMaterialById(id);
}
公共类ChefsBoxRepository{
私有MutableLiveData searchResults=新的MutableLiveData();
私人生活资料;
私人原料道原料道;
//公共构造函数
公共ChefsBoxRepository(应用程序){
chefsboxroomdb数据库;
db=ChefsBoxRoomDataBase.getDatabase(应用程序);
rawMaterialDao=db.rawMaterialDao();
AllMaterialDao.getAllMaterials();
}
//由视图模型使用
公共LiveData getAllMaterials(){
归还所有材料;
}
//由视图模型使用
公共可变LiveData getSearchResults(){
返回搜索结果;
}
公共void insertMaterial(RawMaterialsEntity newMaterial){
InsertAsyncTask任务=新的InsertAsyncTask(rawMaterialDao);
任务。执行(新材料);
}
公共空间成本管理(){
CostPerGmAsyncTask任务=新的CostPerGmAsyncTask(rawMaterialDao);
task.execute();
}
公共成本(){
TotalCostAsyncTask任务=新的TotalCostAsyncTask(rawMaterialDao);
task.execute();
}
公共void deleteMeterial(字符串名称){
DeleteAsyncTask任务=新的DeleteAsyncTask(rawMaterialDao);
task.execute(名称);
}
公共void findMaterial(字符串名称){
QueryAsyncTask任务=新的QueryAsyncTask(rawMaterialDao);
task.delegate=this;
task.execute(名称);
}
公共无效findMaterialById(int id){
QueryAsyncTask2任务=新的QueryAsyncTask2(rawMaterialDao);
task.delegate=this;
任务执行(id);
}
私有void异步完成(列出结果){
searchResults.setValue(结果);
}
//用于从数据库调用项的QueryAsyncTask
私有静态类QueryAsyncTask扩展
异步任务{
私有原料道;
私有ChefsBoxRepository委托=null;
QueryAsyncTask(原料道){
asyncTaskDao=dao;
}
@凌驾
受保护列表doInBackground(最终字符串…参数){
返回asyncTaskDao.findMaterial(参数[0]);
}
@凌驾
受保护的void onPostExecute(列表结果){
delegate.asyncFinished(结果);
}
}
//用于从数据库调用项的QueryAsyncTask
私有静态类QueryAsyncTask2扩展
异步任务{
私有原料道;
私有ChefsBoxRepository委托=null;
QueryAsyncTask2(原料道){
asyncTaskDao=dao;
}
@凌驾
受保护列表doInBackground(最终整数…参数){
返回asyncTaskDao.findMaterialById(参数[0]);
}
@凌驾
受保护的void onPostExecute(列表结果){
delegate.asyncFinished(结果);
}
}
//用于将项目插入数据库的InsertAsyncTask
私有静态类InsertAsyncTask扩展了AsyncTask{
私有原料道;
InsertAsyncTask(RawMaterialsDao){
asyncTaskDao=dao;
}
@凌驾
受保护的无效doInBackground(最终RawMaterialsEntity…参数){
asyncTaskDao.insertMaterial(参数[0]);
返回null;
}
}
//DeleteAsyncTask用于从数据库中删除项目
私有静态类DeleteAsyncTask扩展了AsyncTask{
私有原料道;
DeleteAsyncTask(RawMaterialsDao){
asyncTaskDao=dao;
}
@凌驾
受保护的Void doInBackground(最终字符串…参数){
asyncTaskDao.deleteM
@Query("SELECT * FROM raw_materials WHERE id = :id")
LiveData<RawMaterialsEntity> findMaterialById(int id);
public LiveData<RawMaterialsEntity> findMaterialById(int id) {
return rawMaterialDao.findMaterialById(id);
}
public LiveData<RawMaterialsEntity> findMaterialById(int id) {
return repository.findMaterialById(id);
}
RawMaterialViewModel materialViewModel = new ViewModelProvider(this).get(RawMaterialViewModel.class);
// Update the cached copy of the words in the adapter.
Intent intent = getIntent();
if (intent != null && intent.hasExtra("ID")) {
id = intent.getIntExtra("ID", -1);
// TODO: get material details based on material id
// Set up the materialViewModel
materialViewModel = new ViewModelProvider(this).get(RawMaterialViewModel.class);
materialViewModel.findMaterialById(id).observe(this, new Observer<RawMaterialsEntity>() {
@Override
public void onChanged(RawMaterialsEntity rawMaterialsEntity) {
mMaterialName.setText(rawMaterialsEntity.getRawMaterialName());
mMaterialBrand.setText(rawMaterialsEntity.getRawMaterialBrand());
}
});