在Android中使用Realm添加信息后,数据不会立即更新

在Android中使用Realm添加信息后,数据不会立即更新,android,android-fragments,realm,android-alertdialog,realm-mobile-platform,Android,Android Fragments,Realm,Android Alertdialog,Realm Mobile Platform,我已经在我的应用程序中实现了领域数据库。首先,我想展示一些preld数据。到目前为止,我这里只有三个数据。我已经实现了一个对话框片段,用于在领域数据库中添加数据。我已经阅读了王国的官方文件。但是适配器类的实现对我来说太复杂了。因此,我在Adpeter类中使用了RecyclerView.Adapter。现在我面临的问题是,在添加信息后,数据没有及时显示。数据没有快速更新。再次单击“添加”按钮后,它将显示。我无法确定在这种情况下会出现什么问题。如果有人给我建议,如果这个代码写得不好,我也很高兴。对不

我已经在我的应用程序中实现了领域数据库。首先,我想展示一些preld数据。到目前为止,我这里只有三个数据。我已经实现了一个对话框片段,用于在领域数据库中添加数据。我已经阅读了王国的官方文件。但是适配器类的实现对我来说太复杂了。因此,我在Adpeter类中使用了RecyclerView.Adapter。现在我面临的问题是,在添加信息后,数据没有及时显示。数据没有快速更新。再次单击“添加”按钮后,它将显示。我无法确定在这种情况下会出现什么问题。如果有人给我建议,如果这个代码写得不好,我也很高兴。对不起,我的英语不好

编辑的适配器类 这是我的Adpater课程

   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();
    }