私のアプリケーションでは、Realm DBを使用してすべてのデータをローカルデータベースに格納しています。私はアプリの開始時に見せたい最初の模擬データを持っています。以前はbegintransactionメソッドを実装していました。しかし、ドキュメンテーションを読んだ後、私はトランスラクションメソッドを実行することを意味しています。このメソッドを使用すると、新しいデータを簡単に更新できます。問題は、私がrecyclerviewを表示するオプションをクリックするたびに、データが毎回ループしていることです。たとえば私は3つのデータを持っています。前のページに戻って、このrecyclerviewページに再度行くと、二重になり、次回はそれが三角形になるなどします。私はビューに更新されたデータだけを表示したい。もし私が4番目のデータを追加したら、これを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);
}
追加変更リスナーonCreate()
に、あなたは追加basicCRUD(personRealm);
を実行しているためだ
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();
}
はあなたcraetedクラス '新しいInitialDataは()'や '新しいInitialDataPersons()'またはそのような何かを持って提供することができますこの方法? – EpicPandaForce
人のための@EpicPanda私のクラス名はInitialDataです。 –
質問を更新することをお勧めします – EpicPandaForce