2016-04-22 54 views
1

在我的应用程序中,我在主要活动中实施了Sliding菜单抽屉。 菜单的设计是自定义的,点击菜单中的listitem会打开一个片段。如何避免导致口吃打开片段的滑动菜单滞后?

private class SlideMenuClickListener implements 
     ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
          long id) { 
     // display view for selected nav drawer item 
     displayView(position); 
    } 
} 
private void displayView(int position) { 
    // update the main content by replacing fragments 
    Fragment fragment = null; 
    switch (position) { 
     case 0: 
      fragment=new LastTransactionsDetails(); 

      break; 
     case 1: 
      fragment = new Statement_of_Transaction(); 
      break; 
     case 2: 
      fragment = new AccountDetails(); 

      break; 
     case 3: 
      fragment=new ProfileSetting(); 

      break; 
      case 4: 
      fragment=new LastTransactionsDetails(); 

      break; 

     default: 
      break; 
    } 

    if (fragment != null) { 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); 
     // update selected item and title, then close the drawer 
     mDrawerList.setItemChecked(position, true); 
     mDrawerList.setSelection(position); 
     setTitle(navMenuTitles[position]); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 
} 

滑动菜单的关闭显示有点延迟,导致菜单结构不畅。片段onCreateView正在调用一个包含对webservice方法的调用的异步任务。是否因为引起延迟的片段加载?如果是的话,我有什么改变? 片段代码如下:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 

    mActivity = context instanceof Activity ? (Activity) context : null; 
    viewUtils = new ViewUtils(mActivity); 
    webServicesParams = new WebServicesParams(mActivity); 
    database = new DbAdapter(context); 
    database.createDatabase(); 
    database.open(); 
    parseJsonResponse = new ParseJsonResponse(); 
    showProgressDialog(); 

} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.last_transactions_details, container, false); 

    listView_transactions = (ListView) rootView.findViewById(R.id.listView_transactions); 

    try { 


     String jsonResponse = webServicesParams.Last_Transaction(); 
     arr_last_trans = parseJsonResponse.getTierDetails(jsonResponse); 

     adapter = new LastTransactionAdapter(arr_last_trans,getActivity()); 
     listView_transactions .setAdapter(adapter); 

     dismissProgressDialog(); 
    } 

回答

1

添加一些延迟后的导航项目点击加载片段之前,顺利关闭slidemenu。

private final Handler mDrawerHandler = new Handler(); 
//Wait for few millis before replacing fragment to allow slidemenu to fully close. 
public void smoothReplaceFragment(final Fragment fragment) { 
    mDrawerHandler.removeCallbacksAndMessages(null); 
    mDrawerHandler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      replaceFragment(fragment); 
     } 
    }, 350); 
} 

//Replace Fragment 
public void replaceFragment(Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); 
}