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

// ...