【发布时间】:2018-01-17 10:18:01
【问题描述】:
在我的应用程序中,我使用 Realm DB 将所有数据存储在本地数据库中。我有一些初始模拟数据,我想在应用程序开始时显示它们。以前我实现了 begintransaction 方法。但是在阅读了文档后,我实现了执行交易方法。因为这种方法很容易更新我的新数据。现在的问题是,每当我单击显示recyclerview 的选项时,数据每次都在循环。例如我有 3 个数据。如果我回到上一页并再次进入这个 recyclerview 页面,它会变成双倍,下一次变成三倍,依此类推。我只想在视图中显示更新的数据。就像我添加第四个数据一样,我想将其显示给 recyclerview。如何在我的应用程序中停止每次运行时循环。
这是我的代码
个人页面
public class InitialData implements Realm.Transaction {
@Override
public void execute(Realm realm) {
List<PersoneModel> person = new ArrayList<>();
PersonModel model = new PersonModel();
model.setId(1 + System.currentTimeMillis());
model.setName("Name1");
model.setCompany("Comapny1");
model.setTitle("Title1");
person.add(model);
model = new PersonModel();
model.setId(2 + System.currentTimeMillis());
model.setName("Name2");
model.setCompany("Company2");
model.setTitle("Title2");
person.add(model);
model = new PersonModel();
model.setId(2 + System.currentTimeMillis());
model.setName("Name2");
model.setCompany("Company2");
model.setTitle("Title2");
person.add(model);
model = new PersonModel();
model.setId(3 + System.currentTimeMillis());
model.setName("Name3");
model.setCompany("Comapny3");
model.setTitle("Title3");
person.add(model);
for (PersonModel realmModel : colleague) {
realm.insertOrUpdate(realmModel);
}
}
@Override
public boolean equals(Object obj) {
return obj != null && obj instanceof InitialData;
}
@Override
public int hashCode() {
return InitialData.class.hashCode();
}
}
新闻页面初始数据
public class InitialDataNews implements Realm.Transaction {
@Override
public void execute(Realm realm) {
List<NewsModel> newsItem = new ArrayList<>();
NewsModel model = new NewsModel();
model.setId(1+System.currentTimeMillis());
model.setImage(R.drawable.image1);
model.setTitle("title1");
model.setDate("12.07.2017");
model.setDetail("deascription");
newsItem.add(model);
model = new NewsModel();
model.setId(3+System.currentTimeMillis());
model.setImage(R.drawable.image3);
model.setTitle("title2");
model.setDate("05.05.2017");
model.setDetail("description");
newsItem.add(model);
model = new NewsModel();
model.setId(4+System.currentTimeMillis());
model.setImage(R.drawable.image4);
model.setTitle("title3");
model.setDate("13.04.2017");
model.setDetail("description3");
newsItem.add(model);
.....
for (NewsModel realmModel : newsItem) {
realm.insertOrUpdate(realmModel);
}
}
@Override
public boolean equals(Object obj) {
return obj != null && obj instanceof InitialData;
}
@Override
public int hashCode() {
return InitialData.class.hashCode();
}
}
基础应用程序
@Override
public void onCreate() {
super.onCreate();
// The Realm file will be located in Context.getFilesDir() with name "default.realm"
//Here we setup the realm configuration.
//Setting a default configuration in custom Application class, will ensure that it is available in the rest of the code.
Realm.init(this);
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder()
.deleteRealmIfMigrationNeeded()
.initialData(CompositeInitialData.of(new InitialDataNews(), new InitialData()).build());
Realm.setDefaultConfiguration(realmConfiguration);
}
添加更改监听器
public class PersonPage extends AppCompatActivity implements PersonAdapter.PersonListListener{
private RecyclerView recyclerView;
private PersonAdapter adapter;
private Realm PersonRealm;
private RealmResults<PersoneModel> personResult;
private RealmChangeListener realmListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mycolleagues_layout);
personRealm = Realm.getDefaultInstance();
recyclerView = (RecyclerView) findViewById(R.id.colleagues_recycler);
realmListener=new RealmChangeListener() {
@Override
public void onChange(Object o) {
showAllPersons();
}};
colleagueRealm.addChangeListener(realmListener);
setUpRecycler();
}
private void showAllPersons() {
realmResult = personRealm.where(PersonModel.class).findAllAsync();
setAdapter(realmResult);
adapter.notifyDataSetChanged();
}
private void setAdapter(RealmResults<PersonModel> results) {
adapter = new PersonAdapter(this, personRealm.where(PersonModel.class).findAllSortedAsync("id"),this);
recyclerView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
【问题讨论】:
-
您创建了
new InitialData()或new InitialDataPersons()或类似的课程吗? -
@EpicPanda for person my classname is InitialData.
-
我建议然后更新问题
-
@EpicPanda 我已经给出了两个初始数据类
-
它们是在自己的 java 文件中还是在另一个类中?如果他们在另一个班级,那么他们需要是
public static class。
标签: android android-recyclerview duplicates realm realm-mobile-platform