2016-10-04 7 views
0

私のアプリにはナビゲーションドロワーがあります。ナビゲーションドロワーのアイテムをクリックすると、特定のフラグメントがロードされます。 ですが、断片の読み込みには数秒かかることがあります。その間に表示されるプログレス・スピナーが欲しいので、邪魔にならないように見えます。 私は非同期タスクを使用しようとしましたが、ドロワからフラグメントをロードするのにバックグラウンドプロセスが含まれていないため、動作しませんでした。 私に何か提案してください。ナビゲーションドロワーの項目をクリックするとフラグメントをロードする前に円を進める方法

ナビゲーションドロワー活動

@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メソッドが非常に速く呼び出されたため、進行スピナーは表示されません。

他のオプションは、地図がロードされるまでドロワの項目をクリックしてスプラッシュ画面を追加することができますが、マップが正しく表示されるようにスプラッシュ画面を終了する方法を考える方法はわかりません。

+0

フラグメント内にプログレスバーを表示し、完全にロードされたフラグメントを一旦閉じた後で閉じる –

+0

問題の再現性を高めるために、また他の人が手助けできるように、コードの関連ビットを表示する必要があります。 – YakovL

+0

私は質問を更新しました。問題を解決するのに助けてください – chandra

答えて

0

私は、ハンドラクラスを使用してフラグメントをロードする前に引き出しを閉めるとナビゲーションドロワー項目ののonClickで進行状況ダイアログコードを設定することで解決の問題を得ました。

0
ProgressDialog progress; // Global varibale 

// Initiate it in `OnCreateView()` 
progress = ProgressDialog.show(getActivity(), "dialog title", 
    "dialog message", true); 

//When Loaded data 
progress.dismiss(); 
+0

@chandraは 'this'を' getActivity() 'に変更しました。まだ問題がある場合はここでコメントしてください。 –

+0

私は地図を読み込むためにこれをしたいです。だから、私はこのprogress.dismiss()onViewCreated()メソッドを記述する必要がありますか? – chandra

+0

@chandraあなたのコードを表示しない限り、私は何かを提案することができます。 –