私のアプリにはナビゲーションドロワーがあります。ナビゲーションドロワーのアイテムをクリックすると、特定のフラグメントがロードされます。 ですが、断片の読み込みには数秒かかることがあります。その間に表示されるプログレス・スピナーが欲しいので、邪魔にならないように見えます。 私は非同期タスクを使用しようとしましたが、ドロワからフラグメントをロードするのにバックグラウンドプロセスが含まれていないため、動作しませんでした。 私に何か提案してください。ナビゲーションドロワーの項目をクリックするとフラグメントをロードする前に円を進める方法
ナビゲーションドロワー活動
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_navigation_fragments);
toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.test_nav_tool);
setSupportActionBar(toolbar);
SharedPreferences w = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor share = w.edit();
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
nvDrawer = (NavigationView) findViewById(R.id.nvView);
////if user skip-logout button in nav drawer will disable.
loggedIn=(w.getBoolean("loggedIn", loggedIn));
if(loggedIn==false){
nvDrawer.getMenu().findItem(R.id.logout).setVisible(false);
}
String user_name = (w.getString("name", user));
String type = "b";
type=(w.getString("type", type));
if(user_name.equalsIgnoreCase("name"))
user_name="Guest User";
if(type.equalsIgnoreCase("b")){
nvDrawer.getMenu().findItem(R.id.add_kitchen).setVisible(false);
nvDrawer.getMenu().findItem(R.id.nav_slideshow).setVisible(false);
}
header = LayoutInflater.from(this).inflate(R.layout.test_header_xml, null);
nvDrawer.addHeaderView(header);
TextView tv1=(TextView)header.findViewById(R.id.upload_image);
tv1.setText(user_name);
setupDrawerContent(nvDrawer);
drawerToggle=setupDrawerToggle();
mDrawer.addDrawerListener(drawerToggle);
if (savedInstanceState == null) {
nvDrawer.getMenu().performIdentifierAction(R.id.nav_camera, 0);
}
}
private ActionBarDrawerToggle setupDrawerToggle() {
return new ActionBarDrawerToggle(TestNavigationFragments.this, mDrawer, toolbar, R.string.drawer_open, R.string.drawer_close);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggles
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
private void setupDrawerContent(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
selectDrawerItem(menuItem);
return true;
}
});
}
public void selectDrawerItem(MenuItem menuItem) {
Fragment fragment = null;
setTitle(menuItem.getTitle());
switch(menuItem.getItemId()) {
case R.id.nav_camera:
fragment=new TESTfragNEIBMAP();
break;
case R.id.nav_share:
fragment = new TestFragACCOUNT();
break;
case R.id.nav_send:
fragment = new TESTfragSUPPORT();
break;
case R.id.add_kitchen:
fragment = new TestfragSELLER();
break;
case R.id.nav_slideshow:
fragment=new TestAddKitchenHistory();
break;
case R.id.nav_gallery:
fragment=new TestNavOrder();
break;
case R.id.logout:
try {
SharedPreferences s = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = s.edit();
editor.clear().commit();
Intent intent = new Intent(this, Login.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();
break;
}catch (Exception e){
Intent intent = new Intent(this, Login.class);
startActivity(intent);
}
case R.id.nav_track:
fragment = new TestTrack();
break;
}
if(fragment!=null){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
}
// Highlight the selected item has been done by NavigationView
menuItem.setChecked(true);
// Set action bar title
setTitle(menuItem.getTitle());
// Close the navigation drawer
mDrawer.closeDrawers();
}
}
UPDATE 私はまた、引き出しの活動にprogessコードを書いてみましたし、断片onViewCreated()メソッドでそれを却下...しかし、私はやってきました引き出しの項目をクリックした時点では、マップが開かれ、そのonViewCreatedメソッドが非常に速く呼び出されたため、進行スピナーは表示されません。
他のオプションは、地図がロードされるまでドロワの項目をクリックしてスプラッシュ画面を追加することができますが、マップが正しく表示されるようにスプラッシュ画面を終了する方法を考える方法はわかりません。
フラグメント内にプログレスバーを表示し、完全にロードされたフラグメントを一旦閉じた後で閉じる –
問題の再現性を高めるために、また他の人が手助けできるように、コードの関連ビットを表示する必要があります。 – YakovL
私は質問を更新しました。問題を解決するのに助けてください – chandra