如何尽快刷新导航抽屉的列表作为其开/ Android中关闭 [英] How to refresh list of the navigation drawer as soon as its open/closed in Android

查看:160
本文介绍了如何尽快刷新导航抽屉的列表作为其开/ Android中关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了导航抽屉,在列表中显示的项目。我的列表是静态的,但我展示点。因此,当用户选择列表中的项目,并做一些活动,他获得积分。所以我想,只要他得到更新点。我怎样才能做到这一点./

下面是我的code:

活动类:

  @覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.home_page);
    //初始化
    DataList控件=新的ArrayList< D​​rawerItem>();
    mTitle = mDrawerTitle =的getTitle();
    mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
    mDrawerList =(ListView控件)findViewById(R.id.left_drawer);

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);

    共享preferences = getShared preferences(Constant.LOGIN_CHECK,
            Constant.PRIVATE_MODE);
    editShared preferences =共享preferences.edit();
    如果(共享preferences.getBoolean(Constant.IS_ALREADY_LOGIN,
            假)) {
        loginInBackground();
    }
    字符串P1 =共享preferences.getString(Constant.USERS_POINTS,
            );
    字符串P2 =共享preferences.getString(
            Constant.LEVEL_ONE_POINTS,);
    字符串P3 =共享preferences.getString(
            Constant.LEVEL_TWO_POINTS,);

    字符串pointText =点;
    dataList.add(新DrawerItem(概述,R.drawable.ic_action_eye,
            Color.DKGRAY,Color.TRANSPARENT));
    dataList.add(新DrawerItem(赚取积分,R.drawable.ic_action_dollor,
            Color.GREEN,Color.TRANSPARENT));
    dataList.add(新DrawerItem(我的观点,P1 + pointText,Color.BLACK,
            Color.BLACK));
    dataList.add(新DrawerItem(转诊积分LV1,P2 + pointText,
            Color.BLACK,Color.BLACK));
    dataList.add(新DrawerItem(转诊积分LV2,P3 + pointText,
            Color.BLACK,Color.BLACK));
    dataList.add(新DrawerItem(撤回奖励,
            R.drawable.ic_action_home,Color.DKGRAY,Color.TRANSPARENT));
    dataList.add(新DrawerItem(我的档案,R.drawable.ic_action_settings,
            Color.DKGRAY,Color.TRANSPARENT));
    dataList.add(新DrawerItem(帮助,R.drawable.help_d,Color.DKGRAY,
            Color.TRANSPARENT));

    适配器=新CustomDrawerAdapter(这一点,R.layout.custom_drawer_item,
            DataList控件);

    mDrawerList.setAdapter(适配器);

    mDrawerList.setOnItemClickListener(新DrawerItemClickListener());

    getActionBar()setDisplayHomeAsUpEnabled(真)。
    getActionBar()setHomeButtonEnabled(真)。

    mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,
            R.drawable.ic_drawer,R.string.drawer_open,
            R.string.drawer_close){
        公共无效onDrawerClosed(查看视图){
            。getActionBar()的setTitle(mTitle);
            invalidateOptionsMenu(); //创建调用
                                        //在prepareOptionsMenu()
        }

        公共无效onDrawerOpened(查看drawerView){
            。getActionBar()的setTitle(mDrawerTitle);
            invalidateOptionsMenu(); //创建调用
                                        //在prepareOptionsMenu()
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    如果(savedInstanceState == NULL){
        的SelectItem(0);
    }

}

@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    字符串pointsLeft =共享preferences.getString(
            Constant.POINTS_LEFT,);
    。getMenuInflater()膨胀(R.menu.main,菜单);
    this.menu =菜单;
    菜单项pointsMenu = menu.findItem(R.id.action_settings);
    pointsMenu.setTitle(pointsLeft +点);
    返回true;
}

公共无效的SelectItem(INT possition){

    片段片段= NULL;
    捆绑的args =新包();
    开关(possition){
    情况下0:
        片段=新FragmentWelcome();
        args.putString(FragmentWelcome.ITEM_NAME,dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(参数);
        FragmentManager frgManager0 = getFragmentManager();
        frgManager0.beginTransaction()
                .replace(R.id.content_frame,片段).commit();
        打破;
    情况1:
        片段=新FragmentAppList();
        args.putString(FragmentWelcome.ITEM_NAME,dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(参数);
        FragmentManager frgManager1 = getFragmentManager();
        frgManager1.beginTransaction()
                .replace(R.id.content_frame,片段).commit();
        打破;
    壳体5:
        片段=新FragmentRedeemPoints();
        args.putString(FragmentWelcome.ITEM_NAME,dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(参数);
        FragmentManager frgManager2 = getFragmentManager();
        frgManager2.beginTransaction()
                .replace(R.id.content_frame,片段).commit();
        打破;
    情况6:
        片段=新SettingsFragment();
        args.putString(FragmentWelcome.ITEM_NAME,dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(参数);
        FragmentManager frgManager6 = getFragmentManager();
        frgManager6.beginTransaction()
                .replace(R.id.content_frame,片段).commit();
        打破;
    案例7:
        片段=新HelpFragment();
        args.putString(FragmentWelcome.ITEM_NAME,dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(参数);
        FragmentManager frgManager7 = getFragmentManager();
        frgManager7.beginTransaction()
                .replace(R.id.content_frame,片段).commit();
        打破;

    默认:

        打破;
    }

    mDrawerList.setItemChecked(possition,真正的);
    mDrawerLayout.closeDrawer(mDrawerList);

}

@覆盖
公共无效的setTitle(CharSequence的标题){
    mTitle =称号;
    。getActionBar()的setTitle(mTitle);
}

@覆盖
保护无效onPostCreate(包savedInstanceState){
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
    super.onConfigurationChanged(NEWCONFIG);

    mDrawerToggle.onConfigurationChanged(NEWCONFIG);
}

@覆盖
公共布尔onOptionsItemSelected(菜单项项){

    如果(mDrawerToggle.onOptionsItemSelected(项目)){
        返回true;
    }

    返回false;
}

私有类DrawerItemClickListener工具
        ListView.OnItemClickListener {
    @覆盖
    公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
            长ID){
        的SelectItem(位置);

    }
}
 

CustomDrawerAdapter:

 公共类CustomDrawerAdapter扩展ArrayAdapter< D​​rawerItem> {

上下文语境;
名单< D​​rawerItem> drawerItemList;
INT layoutResID;

公共CustomDrawerAdapter(上下文的背景下,INT layoutResourceID,
        名单< D​​rawerItem> listItems中){
    超(背景下,layoutResourceID,listItems中的);
    this.context =背景;
    this.drawerItemList = listItems中;
    this.layoutResID = layoutResourceID;

}

@燮pressWarnings(静态访问)
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
    // TODO自动生成方法存根

    DrawerItemHolder drawerHolder;
    查看查看= convertView;

    如果(查看== NULL){
        LayoutInflater充气=((活动)上下文).getLayoutInflater();
        drawerHolder =新DrawerItemHolder();

        鉴于= inflater.inflate(layoutResID,父母,假);
        drawerHolder.ItemName =(TextView中)查看
                .findViewById(R.id.drawer_itemName);
        drawerHolder.icon =(ImageView的)view.findViewById(R.id.drawer_icon);
        drawerHolder.pointsText =(TextView中)查看
                .findViewById(R.id.get_login);
        drawerHolder.divider = view.findViewById(R.id.dividerView);
        drawerHolder.itemLayoutColor =(LinearLayout中)查看
                .findViewById(R.id.itemLayoutColor);
        view.setTag(drawerHolder);

    } 其他 {
        drawerHolder =(DrawerItemHolder)view.getTag();

    }

    DrawerItem dItem =(DrawerItem)this.drawerItemList.get(位置);
    如果(dItem.getPointText()== NULL){
        drawerHolder.icon.setImageDrawable(view.getResources()。getDrawable(
                dItem.getImgResID()));
        drawerHolder.pointsText.setVisibility(view.GONE);
    } 其他 {
        drawerHolder.pointsText.setText(dItem.getPointText());
        }
    drawerHolder.itemLayoutColor.setBackgroundColor(dItem.layoutColor code);
    drawerHolder.divider.setBackgroundColor(dItem.color code);
    drawerHolder.ItemName.setText(dItem.getItemName());

    返回查看;
}

私有静态类DrawerItemHolder {
    TextView中了itemname;
    ImageView的图标;
    TextView的pointsText;
    查看除法器;
    的LinearLayout itemLayoutColor;
}
 }
 

解决方案

最后,我已经通过下面使用code.This不是正确的解决方案,解决了这个问题。但我仍然要回答这个,让其他人可以从这个基准。 @ user3154663。可能是这将帮助你解决你的问题:

  @覆盖
公共布尔prepareOptionsMenu(功能菜单)在{
    布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    如果(drawerOpen){
        dataList.remove(2);
        P1 =共享preferences.getString(Constant.USERS_POINTS,);
        P2 =共享preferences.getString(Constant.LEVEL_ONE_POINTS,
                );
        P3 =共享preferences.getString(Constant.LEVEL_TWO_POINTS,
                );
        字符串pointText =点;
        dataList.add(2,新DrawerItem(我的观点,P1 + pointText,
                Color.BLACK,Color.BLACK));
        dataList.remove(3);
        dataList.add(3,新DrawerItem(转诊积分LV1,P2
                + pointText,Color.BLACK,Color.BLACK));
        dataList.remove(4);
        dataList.add(4,新DrawerItem(转诊积分LV2,第3页
                + pointText,Color.BLACK,Color.BLACK));


        adapter.notifyDataSetChanged();
        mDrawerList.setAdapter(适配器);
    }
    返回super.on prepareOptionsMenu(菜单);
}
 

I have created navigation drawer and displaying items in list. My list is static but i am displaying points. So when users select the items in the list and do some activity he get the points. So i want to update the points as soon as he gets. How can i do this./

Below is my code:

Activity Class:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_page);
    // Initializing
    dataList = new ArrayList<DrawerItem>();
    mTitle = mDrawerTitle = getTitle();
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);

    sharedPreferences = getSharedPreferences(Constant.LOGIN_CHECK,
            Constant.PRIVATE_MODE);
    editSharedPreferences = sharedPreferences.edit();
    if (sharedPreferences.getBoolean(Constant.IS_ALREADY_LOGIN,
            false)) {
        loginInBackground();
    }
    String p1 = sharedPreferences.getString(Constant.USERS_POINTS,
            "");
    String p2 = sharedPreferences.getString(
            Constant.LEVEL_ONE_POINTS, "");
    String p3 = sharedPreferences.getString(
            Constant.LEVEL_TWO_POINTS, "");

    String pointText = " POINTS";
    dataList.add(new DrawerItem("OVERVIEW", R.drawable.ic_action_eye,
            Color.DKGRAY, Color.TRANSPARENT));
    dataList.add(new DrawerItem("EARN POINTS", R.drawable.ic_action_dollor,
            Color.GREEN, Color.TRANSPARENT));
    dataList.add(new DrawerItem("MY POINTS ", p1 + pointText, Color.BLACK,
            Color.BLACK));
    dataList.add(new DrawerItem("REFERRALS POINTS LV1 ", p2 + pointText,
            Color.BLACK, Color.BLACK));
    dataList.add(new DrawerItem("REFERRALS POINTS LV2 ", p3 + pointText,
            Color.BLACK, Color.BLACK));
    dataList.add(new DrawerItem("WITHDRAW REWARDS",
            R.drawable.ic_action_home, Color.DKGRAY, Color.TRANSPARENT));
    dataList.add(new DrawerItem("MY PROFILE", R.drawable.ic_action_settings,
            Color.DKGRAY, Color.TRANSPARENT));
    dataList.add(new DrawerItem("HELP", R.drawable.help_d, Color.DKGRAY,
            Color.TRANSPARENT));

    adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item,
            dataList);

    mDrawerList.setAdapter(adapter);

    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        SelectItem(0);
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    String pointsLeft = sharedPreferences.getString(
            Constant.POINTS_LEFT, "");
    getMenuInflater().inflate(R.menu.main, menu);
    this.menu = menu;
    MenuItem pointsMenu = menu.findItem(R.id.action_settings);
    pointsMenu.setTitle(pointsLeft + " Points");
    return true;
}

public void SelectItem(int possition) {

    Fragment fragment = null;
    Bundle args = new Bundle();
    switch (possition) {
    case 0:
        fragment = new FragmentWelcome();
        args.putString(FragmentWelcome.ITEM_NAME, dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(args);
        FragmentManager frgManager0 = getFragmentManager();
        frgManager0.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        break;
    case 1:
        fragment = new FragmentAppList();
        args.putString(FragmentWelcome.ITEM_NAME, dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(args);
        FragmentManager frgManager1 = getFragmentManager();
        frgManager1.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        break;
    case 5:
        fragment = new FragmentRedeemPoints();
        args.putString(FragmentWelcome.ITEM_NAME, dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(args);
        FragmentManager frgManager2 = getFragmentManager();
        frgManager2.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        break;
    case 6:
        fragment = new SettingsFragment();
        args.putString(FragmentWelcome.ITEM_NAME, dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(args);
        FragmentManager frgManager6 = getFragmentManager();
        frgManager6.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        break;
    case 7:
        fragment = new HelpFragment();
        args.putString(FragmentWelcome.ITEM_NAME, dataList.get(possition)
                .getItemName());
        args.putInt(FragmentWelcome.IMAGE_RESOURCE_ID,
                dataList.get(possition).getImgResID());
        fragment.setArguments(args);
        FragmentManager frgManager7 = getFragmentManager();
        frgManager7.beginTransaction()
                .replace(R.id.content_frame, fragment).commit();
        break;

    default:

        break;
    }

    mDrawerList.setItemChecked(possition, true);
    mDrawerLayout.closeDrawer(mDrawerList);

}

@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    getActionBar().setTitle(mTitle);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return false;
}

private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        SelectItem(position);

    }
}

CustomDrawerAdapter:

public class CustomDrawerAdapter extends ArrayAdapter<DrawerItem> {

Context context;
List<DrawerItem> drawerItemList;
int layoutResID;

public CustomDrawerAdapter(Context context, int layoutResourceID,
        List<DrawerItem> listItems) {
    super(context, layoutResourceID, listItems);
    this.context = context;
    this.drawerItemList = listItems;
    this.layoutResID = layoutResourceID;

}

@SuppressWarnings("static-access")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    DrawerItemHolder drawerHolder;
    View view = convertView;

    if (view == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        drawerHolder = new DrawerItemHolder();

        view = inflater.inflate(layoutResID, parent, false);
        drawerHolder.ItemName = (TextView) view
                .findViewById(R.id.drawer_itemName);
        drawerHolder.icon = (ImageView) view.findViewById(R.id.drawer_icon);
        drawerHolder.pointsText = (TextView) view
                .findViewById(R.id.get_login);
        drawerHolder.divider = view.findViewById(R.id.dividerView);
        drawerHolder.itemLayoutColor = (LinearLayout) view
                .findViewById(R.id.itemLayoutColor);
        view.setTag(drawerHolder);

    } else {
        drawerHolder = (DrawerItemHolder) view.getTag();

    }

    DrawerItem dItem = (DrawerItem) this.drawerItemList.get(position);
    if (dItem.getPointText() == null) {
        drawerHolder.icon.setImageDrawable(view.getResources().getDrawable(
                dItem.getImgResID()));
        drawerHolder.pointsText.setVisibility(view.GONE);
    } else {
        drawerHolder.pointsText.setText(dItem.getPointText());
        }
    drawerHolder.itemLayoutColor.setBackgroundColor(dItem.layoutColorCode);
    drawerHolder.divider.setBackgroundColor(dItem.colorCode);
    drawerHolder.ItemName.setText(dItem.getItemName());

    return view;
}

private static class DrawerItemHolder {
    TextView ItemName;
    ImageView icon;
    TextView pointsText;
    View divider;
    LinearLayout itemLayoutColor;
}
 }

解决方案

Finally i have fixed this by using below code.This is not the proper solution. but still I want to answer to this so that others can get the reference from this. @user3154663. May be this will help you to solve your problem:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    if (drawerOpen) {
        dataList.remove(2);
        p1 = sharedPreferences.getString(Constant.USERS_POINTS, "");
        p2 = sharedPreferences.getString(Constant.LEVEL_ONE_POINTS,
                "");
        p3 = sharedPreferences.getString(Constant.LEVEL_TWO_POINTS,
                "");
        String pointText = " POINTS";
        dataList.add(2, new DrawerItem("MY POINTS ", p1 + pointText,
                Color.BLACK, Color.BLACK));
        dataList.remove(3);
        dataList.add(3, new DrawerItem("REFERRALS POINTS LV1 ", p2
                + pointText, Color.BLACK, Color.BLACK));
        dataList.remove(4);
        dataList.add(4, new DrawerItem("REFERRALS POINTS LV2 ", p3
                + pointText, Color.BLACK, Color.BLACK));


        adapter.notifyDataSetChanged();
        mDrawerList.setAdapter(adapter);
    }
    return super.onPrepareOptionsMenu(menu);
}

这篇关于如何尽快刷新导航抽屉的列表作为其开/ Android中关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆