android 中的片段更新数据
Updating data on Fragments in android
我有一个 MainActivity,它在 tabview 中托管两个片段。 MainActivity 上的方法使用 API 从远程服务器下载数据并使用 IntentService 更新领域数据库。这很好用。但是,我的问题是在下载和数据库更新完成后刷新片段上的数据。我需要重新启动应用程序本身吗?知道我该怎么做吗?
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
update();
setFragment(new DrawFragment());
}
//method to download and update data
private void update(){
if (!ActivityHelper.isDataAvailable()) {
Log.d(CONST.TAG, "Data available. Updating to start...");
Intent intent = new Intent(this, MyIntentService.class);
intent.putExtra("message", "Some message here...");
startService(intent);
}
}
public void setFragment(Fragment fragment){
if(fragment!=null){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_main, fragment);
transaction.commit();
}
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
drawerLayout.closeDrawer(GravityCompat.START);
}
}
}
RealmChangeListener
就是您要查找的内容。它在 Realm Documentation.
中给出
Reuse RealmResults and RealmObjects
在 UI 线程和所有其他 Looper 线程上,当对 Realm 进行更改时,所有 RealmObjects 和 RealmResults 都会自动刷新。这意味着在对 RealmChangedListener 作出反应时无需再次获取这些对象。对象已更新并准备好在屏幕上重新绘制。
public class MyActivity extends Activity {
private Realm realm;
private RealmResults<Person> allPersons;
private RealmChangeListener<RealmResults<Person>> realmListener = new RealmChangeListener<RealmResults<Person>>() {
@Override
public void onChange(RealmResults<Person> results) {
// Just redraw the views. `allPersons` already contain the
// latest data.
invalidateView();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
allPerson = realm.where(Person.class).findAllAsync(); // Create the "live" query result
setupViews(); // Initial setup of views
allPerson.addChangeListener(listener);
}
// ...
我有一个 MainActivity,它在 tabview 中托管两个片段。 MainActivity 上的方法使用 API 从远程服务器下载数据并使用 IntentService 更新领域数据库。这很好用。但是,我的问题是在下载和数据库更新完成后刷新片段上的数据。我需要重新启动应用程序本身吗?知道我该怎么做吗?
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
update();
setFragment(new DrawFragment());
}
//method to download and update data
private void update(){
if (!ActivityHelper.isDataAvailable()) {
Log.d(CONST.TAG, "Data available. Updating to start...");
Intent intent = new Intent(this, MyIntentService.class);
intent.putExtra("message", "Some message here...");
startService(intent);
}
}
public void setFragment(Fragment fragment){
if(fragment!=null){
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content_main, fragment);
transaction.commit();
}
DrawerLayout drawerLayout = findViewById(R.id.drawer_layout);
drawerLayout.closeDrawer(GravityCompat.START);
}
}
}
RealmChangeListener
就是您要查找的内容。它在 Realm Documentation.
Reuse RealmResults and RealmObjects
在 UI 线程和所有其他 Looper 线程上,当对 Realm 进行更改时,所有 RealmObjects 和 RealmResults 都会自动刷新。这意味着在对 RealmChangedListener 作出反应时无需再次获取这些对象。对象已更新并准备好在屏幕上重新绘制。
public class MyActivity extends Activity {
private Realm realm;
private RealmResults<Person> allPersons;
private RealmChangeListener<RealmResults<Person>> realmListener = new RealmChangeListener<RealmResults<Person>>() {
@Override
public void onChange(RealmResults<Person> results) {
// Just redraw the views. `allPersons` already contain the
// latest data.
invalidateView();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
allPerson = realm.where(Person.class).findAllAsync(); // Create the "live" query result
setupViews(); // Initial setup of views
allPerson.addChangeListener(listener);
}
// ...