如何避免滑动菜单滞后导致打开片段的口吃?

时间:2016-04-22 10:58:47

标签: android android-fragments slidingmenu

在我的应用程序中,我在主要活动中实现了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 个答案:

答案 0 :(得分:1)

在导航项单击后和加载片段之前添加一些延迟,以平滑地关闭幻灯片菜单。

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();
}