2016-10-05 10 views
1

DrawerLayoutがスムーズに閉じず、しばらくの間停止するという問題がありました。フラグメントを置き換えた後に完全に閉じます。コーディングでは、fragment(productListクラス)を置き換える前にDrawerLayoutを閉じます。 productListクラスでは、asynctaskを呼び出してサーバーからすべての製品リストを取得し、進行状況バーを実行します。理想的には、ユーザーがメニューをクリックすると、DrawerLayoutが一度に終了し、productListフラグメントがすべての製品リストをロードします。 DrawerLayout closeイベントは、productListのasynctaskを待っているようです。任意の提案が大いに感謝します。フラグメントが置換されるまでAndroid DrawerLayoutが閉じない

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener { 

    public String tag = "MainActivity"; 
    Context mContext; 

    //User Object 
    User user; 

    //Control 
    TextView txtName, txtPosition, txtLogout; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mContext = this; 
     user = Constants.getUser(); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.addDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     //NavigationView Header 
     View headerView = navigationView.getHeaderView(0); 
     txtName = (TextView) headerView.findViewById(R.id.nav_header_main_name) ; 
     txtName.setText(user.getName().toString()); 
     txtLogout = (TextView) headerView.findViewById(R.id.nav_header_main_logout); 
     txtLogout.setOnClickListener(this); 
     navigationView.setNavigationItemSelectedListener(this); 

     //Add Menu in navigationView 
     Menu myMenu = navigationView.getMenu(); 
     myMenu.clear(); 
     myMenu.add(0,Integer.parseInt("01"),0,"Product List"); 



    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    //close drawer 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 

    // replace fragment 
    int id = item.getItemId(); 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    if(Constants.DEBUG) { 
     Toast.makeText(mContext, " Menu Id " + String.valueOf(id), Toast.LENGTH_LONG).show(); 
    } 

    fragmentManager.beginTransaction() 
      .replace(R.id.container,new productList()) 
      .commit(); 


     return true; 
    } 
    @Override 
    public void onClick(View v) { 
     //Log out onclick 
     if(v.getId() == R.id.nav_header_main_logout){ 
      this.finish(); 
     } 

    } 

} 

答えて

1

これはおそらく、ナビゲーションドロワーのアニメーションbeacuse発生し、フラグメントの作成が同時に起こります。 少し遅れてフラグメントを開始することで解決できます。

handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     // replace fragment 
     int id = item.getItemId(); 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     if(Constants.DEBUG) { 
      Toast.makeText(mContext, " Menu Id " + String.valueOf(id), Toast.LENGTH_LONG).show(); 
     } 

     fragmentManager.beginTransaction() 
       .replace(R.id.container,new productList()) 
       .commit(); 
    } 
}, 300); 
関連する問題