在Android中使用Realm添加信息后,数据不会立即更新
我已经在我的应用程序中实现了领域数据库。首先,我想展示一些preld数据。到目前为止,我这里只有三个数据。我已经实现了一个对话框片段,用于在领域数据库中添加数据。我已经阅读了王国的官方文件。但是适配器类的实现对我来说太复杂了。因此,我在Adpeter类中使用了RecyclerView.Adapter。现在我面临的问题是,在添加信息后,数据没有及时显示。数据没有快速更新。再次单击“添加”按钮后,它将显示。我无法确定在这种情况下会出现什么问题。如果有人给我建议,如果这个代码写得不好,我也很高兴。对不起,我的英语不好 编辑的适配器类 这是我的Adpater课程在Android中使用Realm添加信息后,数据不会立即更新,android,android-fragments,realm,android-alertdialog,realm-mobile-platform,Android,Android Fragments,Realm,Android Alertdialog,Realm Mobile Platform,我已经在我的应用程序中实现了领域数据库。首先,我想展示一些preld数据。到目前为止,我这里只有三个数据。我已经实现了一个对话框片段,用于在领域数据库中添加数据。我已经阅读了王国的官方文件。但是适配器类的实现对我来说太复杂了。因此,我在Adpeter类中使用了RecyclerView.Adapter。现在我面临的问题是,在添加信息后,数据没有及时显示。数据没有快速更新。再次单击“添加”按钮后,它将显示。我无法确定在这种情况下会出现什么问题。如果有人给我建议,如果这个代码写得不好,我也很高兴。对不
public class PersonAdapter extends RealmRecyclerViewAdapter<PersonModel, PersonAdapter.PersonHolder> {
private RealmResults<PersoneModel> realmResults;
private List<PersonModel> personModels;
private Context context;
public interface PersonListListener {
void addPerson(PersonModel personModel);
void editPerson(PersonModel personModel);
}
public PersonAdapter(Context context,RealmResults<PersonModel> realmResults) {
this.realmResults = realmResults;
this.context = context;
}
// create new views (invoked by the layout manager)
@Override
public PersonHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// inflate a new person view
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.colleage_row_layout,parent,false);
return new PersonHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
// get the colleague
final PersonModel person=realmResults.get(position);
// cast the generic view holder to the specific one
final PersonHolder holder = (PersonHolder) viewHolder;
holder.name.setText(person.getName());
holder.companye.setText(person.getCompany());
holder.title.setText(person.getTitle());
holder.cardView.setTag(position);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//editDataInterface.editData(view,position);
int pos = (int)view.getTag();
Intent i=new Intent(context,DetailPerson.class);
i.putExtra("name",person.getName());
i.putExtra("company",person.getCompany());
i.putExtra("title",person.getTitle());
context.startActivity(i);
}
});
}
// return the size of your data set (invoked by the layout manager)
public int getItemCount() {
return realmResults.size();
}
public class PersonHolder extends RecyclerView.ViewHolder{
public CardView cardView;
public ImageView picture;
public TextView name;
public TextView company;
public TextView title;
public ColleagueHolder(View itemView) {
super(itemView);
name=(TextView)itemView.findViewById(R.id.person_name);
company=(TextView) itemView.findViewById(R.id.company_name);
title=(TextView) itemView.findViewById(R.id.job_title);
cardView=(CardView)itemView.findViewById(R.id.cardview_user);
}
}
}
公共类PersonalAdapter扩展了RealmRecyclServiceAdapter{
私有RealmResults RealmResults;
私人名单个人模型;
私人语境;
公共接口PersonListListener{
void addPerson(PersonModel PersonModel);
无效编辑人(PersonModel PersonModel);
}
公共角色适配器(上下文,RealmResults RealmResults){
this.realmResults=realmResults;
this.context=上下文;
}
//创建新视图(由布局管理器调用)
@凌驾
public PersonHolder onCreateViewHolder(视图组父级,int-viewType){
//膨胀新的人视图
View=LayoutFlater.from(parent.getContext()).flate(R.layout.collage\u row\u layout,parent,false);
返回新的人员持有者(视图);
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder ViewHolder,int位置){
//找同事
final PersonModel person=realmResults.get(位置);
//将常规视图保持架强制转换为特定的保持架
最终人员持有者=(人员持有者)视图持有者;
holder.name.setText(person.getName());
holder.companye.setText(person.getCompany());
holder.title.setText(person.getTitle());
支架.cardView.setTag(位置);
holder.cardView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//editDataInterface.editData(视图、位置);
int pos=(int)view.getTag();
意图i=新意图(上下文、DetailPerson.class);
i、 putExtra(“name”,person.getName());
i、 putExtra(“公司”,person.getCompany());
i、 putExtra(“title”,person.getTitle());
背景。起始触觉(i);
}
});
}
//返回数据集的大小(由布局管理器调用)
public int getItemCount(){
返回realmResults.size();
}
公共类PersonHolder扩展了RecyclerView.ViewHolder{
公共卡视图卡视图;
公众图片;
公共文本视图名称;
公共文本视图公司;
公共文本视图标题;
公共集合文件夹(视图项视图){
超级(项目视图);
name=(TextView)itemView.findViewById(R.id.person\u name);
company=(TextView)itemView.findViewById(R.id.company\u name);
title=(TextView)itemView.findViewById(R.id.job\u title);
cardView=(cardView)itemView.findViewById(R.id.cardView\u用户);
}
}
}
编辑的活动计算我的活动类是
public class MainActivity extends AppCompatActivity implements PersonAdapter.PersonListListener{
private RecyclerView recyclerView;
private PersonAdapter adapter;
private Realm personRealm;
private List<PersonModel> personObject;
private RealmResults<PersonModel> dataResult;
private static final String DIALOG_TAG = "EmployeeDialog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
// Showing and Enabling clicks on the Home/Up button
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
personRealm = Realm.getDefaultInstance();
recyclerView = (RecyclerView) findViewById(R.id.person_recycler);
setUpRecycler();
if (!Prefs.with(this).getPreLoad()) {
setRealmData();
}
showAllPersons();
}
private void showAllPersons() {
dataResult = personRealm.where(PersonModel.class).findAll();
setAdapter(dataResult);
adapter.notifyDataSetChanged();
}
private void setAdapter(RealmResults<PersonModel> results) {
adapter = new PersonAdapter(this, results);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
private void setUpRecycler() {
// use this setting to improve performance if you know that changes
// in content do not change the layout size of the RecyclerView
recyclerView.setHasFixedSize(true);
// use a linear layout manager since the cards are vertically scrollable
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
}
private void setRealmData(){
List<MyColleagueModel> colleague = new ArrayList<>();
MyColleagueModel model = new MyColleagueModel();
model.setId(1 + System.currentTimeMillis());
model.setName("Name1");
model.setCompany("Comapny1");
model.setTitle("Title1");
colleague.add(model);
model = new MyColleagueModel();
model.setId(2 + System.currentTimeMillis());
model.setName("Name2");
model.setCompany("Comapny2");
model.setTitle("Title1");
colleague.add(model);
model = new MyColleagueModel();
model.setId(3 + System.currentTimeMillis());
model.setName("Name3");
model.setCompany("Comapny3");
model.setTitle("Title3");
colleague.add(model);
for (MyColleagueModel realmModel : colleague) {
// Persist the colleague data
colleagueRealm.beginTransaction();
colleagueRealm.copyToRealm(realmModel);
colleagueRealm.commitTransaction();
}
Prefs.with(this).setPreLoad(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.recycler_menu, menu);
final MenuItem item = menu.findItem(R.id.search);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
//onOptionsItemSelected(MenuItem item) add will open dialog box, which allows user to fill required data
if (id == R.id.addColleague) {
showAlertDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
private void showAlertDialog() {
EditColleagueFragment dialog = new EditColleagueFragment();
//dialog.setPositiveButtonClickListener(this);
dialog.show(getSupportFragmentManager(), DIALOG_TAG);
//adapter.notifyDataSetChanged();
}
@Override
protected void onDestroy() {
if (colleagueRealm!= null)
colleagueRealm.close();
super.onDestroy();
}
/*@Override
public void onSaved() {
dataResult = colleagueRealm.where(MyColleagueModel.class).findAll();
setAdapter(dataResult);
adapter.notifyDataSetChanged();
}*/
@Override
public void addPerson(MyColleagueModel colleagueModel) {
}
@Override
public void editPerson(MyColleagueModel colleagueModel) {
}
}
公共类MainActivity扩展AppCompatActivity实现PersonalAdapter.PersonListListener{
私人回收站;
专用适配器;
私人领域个人领域;
私人名单个人对象;
私有RealmResults数据结果;
私有静态最终字符串对话框\u TAG=“EmployeeDialog”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_布局);
//显示并启用“主页/向上”按钮上的单击
如果(getSupportActionBar()!=null){
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
personRealm=Realm.getDefaultInstance();
recyclerView=(recyclerView)findViewById(R.id.person\U recycler);
设置回收器();
如果(!Prefs.with(this).getPreLoad()){
setRealmData();
}
showAllPersons();
}
私人所有人(){
dataResult=personRealm.where(PersonModel.class).findAll();
setAdapter(dataResult);
adapter.notifyDataSetChanged();
}
私有void setAdapter(RealmResults结果){
适配器=新的PersonalAdapter(此,结果);
recyclerView.setAdapter(适配器);
adapter.notifyDataSetChanged();
}
私人回收商(){
//如果您知道这些更改,请使用此设置提高性能
//在内容中,不要更改RecyclerView的布局大小
recyclerView.setHasFixedSize(true);
//使用线性布局管理器,因为卡可以垂直滚动
最终LinearLayoutManager layoutManager=新的LinearLayoutManager(本);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
}
私有void setRealmData(){
列表同事=新建ArrayList();
MyColleagueModel模型=新的MyColleagueModel();
model.setId(1+System.currentTimeMillis());
model.setName(“Name1”);
型号:setCompany(“Comapny1”);
模式。设置标题(“标题1”);
添加(模型);
模型=新的MyColleagueModel();
model.setId(2+System.currentTimeMillis());
model.setName(“Name2”);
型号:setCompany(“Comapny2”);
模式。设置标题(“标题1”);
添加(模型);
模型=新的MyColleagueModel();
model.setId(3+System.currentTimeMillis());
model.setName(“Name3”);
模型公司(“Comapny3”);
示范作品集标题(“标题3”);
dependencies {
compile 'io.realm:android-adapters:2.1.0'
}
public class MyColleaguesAdapter extends RealmRecyclerViewAdapter<MyColleagueModel, MyColleaguesAdapter.ColleagueHolder> {
public interface ColleagueListListener {
void addPerson(MyColleagueModel colleagueModel);
void editPerson(MyColleagueModel colleagueModel);
}
private final ColleagueListListener colleagueListListener;
public MyColleaguesAdapter(ColleagueListListener colleagueListListener, RealmResults<MyColleagueModel> results) {
super(results, true);
this.colleagueListListener = colleagueListListener;
}
@Override
public ColleagueHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ColleagueHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.colleage_row_layout,parent,false));
}
@Override
public void onBindViewHolder(ColleagueHolder holder, int position) {
final MyColleagueModel myColleague = getData().get(position);
holder.bind(myColleague);
}
public class ColleagueHolder extends RecyclerView.ViewHolder {
public CardView cardView;
public ImageView colleaguePicture;
public TextView colleagueName;
public TextView companyName;
public TextView jobTitle;
private MyColleagueModel myColleague;
private final View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
colleagueListListener.editPerson(myColleague);
}
}
public ColleagueHolder(View itemView) {
super(itemView);
//colleaguePicture=(ImageView)itemView.findViewById(R.drawable.profile_image);
colleagueName=(TextView)itemView.findViewById(R.id.colleague_name);
companyName=(TextView) itemView.findViewById(R.id.company_name);
jobTitle=(TextView) itemView.findViewById(R.id.job_title);
cardView=(CardView)itemView.findViewById(R.id.cardview_user);
}
}
public void bind(MyColleagueModel myColleague) {
this.myColleague = myColleague;
holder.colleagueName.setText(myColleague.getName());
holder.companyName.setText(myColleague.getCompany());
holder.jobTitle.setText(myColleague.getTitle());
holder.cardView.setTag(position);
holder.cardView.setOnClickListener(listener);
}
}
public class MyColleaguesPage extends AppCompatActivity implements MyColleaguesAdapter.ColleagueListListener {
private Realm realm;
private RecyclerView recyclerView;
private MyColleaguesAdapter adapter;
private static final String DIALOG_TAG = "EmployeeDialog";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
// Showing and Enabling clicks on the Home/Up button
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
realm = Realm.getDefaultInstance();
recyclerView = (RecyclerView) findViewById(R.id.colleagues_recycler);
recyclerView.setHasFixedSize(true);
final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
adapter = new MyColleaguesAdapter(this, realm.where(MyColleagueModel.class).findAllSortedAsync("id"));
recyclerView.setAdapter(adapter);
}
@Override
protected void onDestroy() {
super.onDestroy();
realm.close();
realm = null;
}
}
public interface onSaveClickListener {
void onSaved()
}
private onSaveClickListener mSaveClickListener;
public void setPositiveButtonClickListener(onSaveClickListener listener){
mSaveClickListener=listener;
}
@Override
void onSaved(){
dataResult = colleagueRealm.where(MyColleagueModel.class).findAll();
setAdapter(dataResult);
adapter.notifyDataSetChanged();
}
private void showAlertDialog() {
EditColleagueFragment dialog = new EditColleagueFragment();
dialog.setPositiveButtonClickListener(this)
dialog.show(getSupportFragmentManager(), DIALOG_TAG);
}
void savePerson(){
-----
---
mSaveClickListener.onSaved();
}