如何尽快刷新导航抽屉的列表作为其开/ Android中关闭 [英] How to refresh list of the navigation drawer as soon as its open/closed in Android
问题描述
我已经创建了导航抽屉,在列表中显示的项目。我的列表是静态的,但我展示点。因此,当用户选择列表中的项目,并做一些活动,他获得积分。所以我想,只要他得到更新点。我怎样才能做到这一点./
下面是我的code:
活动类:
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.home_page);
//初始化
DataList控件=新的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);
共享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< DrawerItem> {
上下文语境;
名单< DrawerItem> drawerItemList;
INT layoutResID;
公共CustomDrawerAdapter(上下文的背景下,INT layoutResourceID,
名单< DrawerItem> 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屋!