2016-04-22 56 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(); 
}