我想用房间更新listview中的元素,但是不起作用。 添加和删除工作正常,但更新不起作用 这是我的代码
@Insert
public void addZakazi(Zakazi zakazi);
@Query("select * from orders")
public List<Zakazi> getZakazi();
@Delete
public void deleteZakazi(Zakazi zakaz);
@Update
public void updateZakazi(Zakazi zakazi);
我按下按钮并调用另一个片段的片段代码
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Zakazi zakaz=getItem(position);
String cNam=zakaz.getClName();
String o=zakaz.getOrder();
int pric=zakaz.getPricec();
Bundle bundle=new Bundle();
bundle.putInt("price",pric);
bundle.putString("cName",cNam);
bundle.putString("order",o);
updateFragment uf =new updateFragment();
uf.setArguments(bundle);
FragmentTransaction ft=getFragmentManager().beginTransaction();
ft.replace(R.id.fragmentContainer, uf);
ft.addToBackStack(null);
ft.commit();
}
});
return convertView;
}
必须完成更新的被调用片段的代码
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.update_order_layout,parent,false);
Cname=(EditText)view.findViewById(R.id.clients_name_up);
price=(EditText)view.findViewById(R.id.price_edit_up);
order=(EditText)view.findViewById(R.id.order_edit_up);
updateB=(Button)view.findViewById(R.id.updateB);
Bundle bundle=getArguments();
String ord=bundle.getString("order");
String clnam=bundle.getString("cName");
int pri=bundle.getInt("price");
Cname.setText(clnam);
price.setText(String.valueOf(pri));
order.setText(ord);
updateB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String cn=Cname.getText().toString();
String orderr=order.getText().toString();
int p=Integer.parseInt(price.getText().toString());
Zakazi zakazi=new Zakazi();
zakazi.setClName(cn);
zakazi.setOrder(orderr);
zakazi.setPricec(p);
OrderActivity.myAppDatabase.myDao().updateZakazi(zakazi);
}
});
return view;
}
答案 0 :(得分:1)
问题是您要更新数据时正在创建Zakazi
的新对象。因此,在您的对象中未设置主键id的值,因此数据库不会根据该对象来更新您的记录。
您必须按照以下步骤更新代码:
1.使用第一个片段中Zakazi
中的getId()
来获取update.setOnClickListener
记录的自动生成的ID
2.传递该ID而不是价格,名称和订单。
3.使用您在另一个片段中从捆绑中收到的ID来获取Zakazi对象中的数据。
4.在updateB.setOnClickListener
中更新从数据库中获取数据的同一对象中的数据,而不是创建新对象,然后尝试通过查询OrderActivity.myAppDatabase.myDao().updateZakazi(zakazi);
希望它对您有用。