抽屉式导航栏列表视图位置不刷新 [英] Navigation drawer listview position not refreshing
问题描述
我有一个 NavigationDrawer
在我的申请,我有五个项目在我的抽屉里:
- 首页
- 帐户
- 股票
- 帮助
- 注销
现在,如果用户点击注销它会显示两个项目:
- 首页
- 登录
现在的问题是,当用户点击登录,它总是让查看帐户
公共类MainActivity扩展FragmentActivity {
私人DrawerLayout mDrawerLayout;
私人的ListView mDrawerList;
私人ActionBarDrawerToggle mDrawerToggle;
私人字符串ABC;
私人意图二;
//导航抽屉称号
私人的CharSequence mDrawerTitle;
//用于存储应用程序标题
私人的CharSequence mTitle;
//滑动菜单项
私有String [] navMenuTitles;
私人TypedArray navMenuIcons;
私人的ArrayList< NavDrawerItem> navDrawerItems;
私人NavDrawerListAdapter适配器;
共享preferences preFS;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
preFS = preferenceManager.getDefaultShared preferences(getApplicationContext());
prefs.edit()putBoolean(锁定,真).commit()。
二= getIntent();
mTitle = mDrawerTitle =的getTitle();
//负荷滑动菜单项
navMenuTitles = getResources()getStringArray(R.array.nav_drawer_items)。
//导航抽屉,从资源的图标
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);
mDrawerList =(ListView控件)findViewById(R.id.list_slidermenu);
navDrawerItems =新的ArrayList< NavDrawerItem>();
//清空适配器阵列
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0));
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1),5));
/*navDrawerItems.add(new NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1)));
//查找人员
navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1)));
//照片
navDrawerItems.add(新NavDrawerItem(navMenuTitles [2],navMenuIcons.getResourceId(2,-1)));
//社区,这里将添加计数器
navDrawerItems.add(新NavDrawerItem(navMenuTitles [3],navMenuIcons.getResourceId(3,-1)));
//网页
navDrawerItems.add(新NavDrawerItem(navMenuTitles [4],navMenuIcons.getResourceId(4,-1))); * /
// navDrawerItems.remove(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1)));
//热点,我们将在这里添加计数器
//navDrawerItems.add(new NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1)));
//回收类型数组
//navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(新SlideMenuClickListener());
//设置导航抽屉名单适配器
适配器=新NavDrawerListAdapter(getApplicationContext()
navDrawerItems);
mDrawerList.setAdapter(适配器);
//使操作栏中的应用程序图标,它表现为切换按钮
getActionBar()setDisplayHomeAsUpEnabled(真)。
getActionBar()setHomeButtonEnabled(真)。
mDrawerToggle =新ActionBarDrawerToggle(这一点,mDrawerLayout,
R.drawable.ic_drawer,//导航菜单切换图标
R.string.app_name,//导航抽屉打开 - 说明访问
R.string.app_name //导航抽屉关闭 - 说明访问
){
公共无效onDrawerClosed(查看视图){
。getActionBar()的setTitle(mTitle);
//调用prepareOptionsMenu()来显示操作栏图标
invalidateOptionsMenu();
}
公共无效onDrawerOpened(查看drawerView){
。getActionBar()的setTitle(mDrawerTitle);
//布尔isUserLoggedOut = GET prefBoolean(pref_is_user_logged_out,假);
//布尔isUserLoggedOut = prefs.getBoolean(锁定,假);
/ *
布尔锁定= TRUE;
共享preferences preFS = preferenceManager.getDefaultShared preferences(); * /
//检查条件和更新列表的要求
/ *如果(isUserLoggedOut){
navDrawerItems.clear();
// 家
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0)); // 登录
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1),5));
}其他{
navDrawerItems.clear();
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0));
//查找人员
navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1),1));
//照片
navDrawerItems.add(新NavDrawerItem(navMenuTitles [2],navMenuIcons.getResourceId(2,-1),2));
//社区,这里将添加计数器
navDrawerItems.add(新NavDrawerItem(navMenuTitles [3],navMenuIcons.getResourceId(3,-1),3));
//网页
navDrawerItems.add(新NavDrawerItem(navMenuTitles [4],navMenuIcons.getResourceId(4,-1),4));
}
adapter.notifyDataSetChanged();
* /
//调用prepareOptionsMenu()隐藏操作栏图标
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState == NULL){
//关于第一导航项目首次显示视图
displayView(0);
}
}
/ **
*滑动菜单项,点击监听器
* * /
私有类SlideMenuClickListener工具
ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
长ID){
对选定的导航抽屉的项目//显示视图
//获取所选择的项目
NavDrawerItem项目= navDrawerItems.get(位置);
对选定的导航抽屉的项目//显示视图
displayView(item.thingToDo);
如果(位置== 4){//的退出按钮位置
navDrawerItems.clear(); //清空适配器阵列
navMenuIcons.recycle();
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0));
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1),5));
//navDrawerItems.remove(new NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1)));
adapter.notifyDataSetChanged();
}
其他 {
如果(ii.hasExtra(登录)){
ABC = ii.getStringExtra(登录);
如果(ABC == ii.getStringExtra(登录)){
navDrawerItems.clear();
navMenuIcons.recycle();
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0));
//查找人员
navDrawerItems.add(新NavDrawerItem(navMenuTitles [1],navMenuIcons.getResourceId(1,-1),1));
//照片
navDrawerItems.add(新NavDrawerItem(navMenuTitles [2],navMenuIcons.getResourceId(2,-1),2));
//社区,这里将添加计数器
navDrawerItems.add(新NavDrawerItem(navMenuTitles [3],navMenuIcons.getResourceId(3,-1),3));
//网页
navDrawerItems.add(新NavDrawerItem(navMenuTitles [4],navMenuIcons.getResourceId(4,-1),4));
// navDrawerItems.remove(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1)));
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this,成功+ ABC,Toast.LENGTH_LONG).show();
} 其他 {
Toast.makeText(MainActivity.this,不成功+ ABC,Toast.LENGTH_LONG).show();
}
}
}
}
}
@覆盖
公共布尔onCreateOptionsMenu(功能菜单){
。getMenuInflater()膨胀(R.menu.main,菜单);
返回true;
}
@覆盖
公共布尔onOptionsItemSelected(菜单项项){
//切换导航抽屉选择操作栏中的应用程序图标/标题
如果(mDrawerToggle.onOptionsItemSelected(项目)){
返回true;
}
//手柄操作栏操作点击
开关(item.getItemId()){
案例R.id.action_settings:
返回true;
默认:
返回super.onOptionsItemSelected(项目);
}
}
/ * *
*当调用invalidateOptionsMenu()被触发
* /
@覆盖
公共布尔prepareOptionsMenu(功能菜单)在{
//如果导航抽屉被打开,隐藏行动项目
布尔drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(drawerOpen!);
返回super.on prepareOptionsMenu(菜单);
}
/ **
* Diplaying片段视图选择导航抽屉列表项
* * /
私人无效displayView(INT位置){
//更新替换片段的主要内容
片段片段= NULL;
开关(位置){
情况下0:
片段=新HomeFragment();
打破;
情况1:
片段=新FindPeopleFragment();
打破;
案例2:
片段=新PhotosFragment();
打破;
案例3:
片段=新CommunityFragment();
打破;
壳体4:
片段=新LoginActivity();
打破;
壳体5:
片段=新LoginActivity();
打破;
默认:
打破;
}
如果(片段!= NULL){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container,片段).commit();
//更新所选项目和标题,然后关上抽屉
mDrawerList.setItemChecked(位置,真正的);
mDrawerList.setSelection(位置);
的setTitle(navMenuTitles [位置]);
mDrawerLayout.closeDrawer(mDrawerList);
} 其他 {
//创建片段错误
Log.e(MainActivity,创建片段错误);
}
}
@覆盖
公共无效的setTitle(CharSequence的标题){
mTitle =称号;
。getActionBar()的setTitle(mTitle);
}
@覆盖
保护无效onPostCreate(包savedInstanceState){
super.onPostCreate(savedInstanceState);
//同步发生onRestoreInstanceState后切换状态。
mDrawerToggle.syncState();
}
@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
super.onConfigurationChanged(NEWCONFIG);
//传递任何配置更改抽屉toggls
mDrawerToggle.onConfigurationChanged(NEWCONFIG);
}
}
适配器
公共类NavDrawerListAdapter扩展了BaseAdapter {
私人上下文的背景下;
私人的ArrayList< NavDrawerItem> navDrawerItems;
公共NavDrawerListAdapter(上下文的背景下,ArrayList的< NavDrawerItem> navDrawerItems){
this.context =背景;
this.navDrawerItems = navDrawerItems;
}
@覆盖
公众诠释getCount将(){
返回navDrawerItems.size();
}
@覆盖
公共对象的getItem(INT位置){
返回navDrawerItems.get(位置);
}
@覆盖
众长getItemId(INT位置){
返回的位置;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
如果(convertView == NULL){
LayoutInflater mInflater =(LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.drawer_list_item,NULL);
}
ImageView的imgIcon =(ImageView的)convertView.findViewById(R.id.icon);
TextView的txtTitle =(TextView中)convertView.findViewById(R.id.title);
TextView的txtCount =(TextView中)convertView.findViewById(R.id.counter);
imgIcon.setImageResource(navDrawerItems.get(位置).getIcon());
txtTitle.setText(navDrawerItems.get(位置).getTitle());
//显示计数
//检查是否设置可见或不可见
如果(navDrawerItems.get(位置).getCounterVisibility()){
txtCount.setText(navDrawerItems.get(位置).getCount());
}其他{
//隐藏计数器视图
txtCount.setVisibility(View.GONE);
}
返回convertView;
}
}
Login_Activity
公共类LoginActivity扩展片段{
公共LoginActivity(){}
私人按钮alreadymember;
私人按钮结账;
私人按钮forgotpass;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
最后查看rootView = inflater.inflate(R.layout.login_activity,集装箱,假);
alreadymember =(按钮)rootView.findViewById(R.id.btn_login_alredymember);
forgotpass =(按钮)rootView.findViewById(R.id.login_forgot_pwd);
结帐=(按钮)rootView.findViewById(R.id.checkout_login);
alreadymember.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图查看){
意向意图=新的意图(getActivity(),MainActivity.class);
intent.putExtra(登录,密码);
startActivity(意向);
/ * HomeFragment TF =新HomeFragment();
android.support.v4.app.FragmentManager FM = getFragmentManager();
android.support.v4.app.FragmentTransaction英尺= fm.beginTransaction();
束束=新包();
bundle.putString(登录,密码);
tf.setArguments(包);
ft.replace(R.id.frame_container,TF);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(空);
ft.commit(); * /
}
});
forgotpass.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图查看){
Forgot_Password TF =新Forgot_Password();
android.support.v4.app.FragmentManager FM = getFragmentManager();
android.support.v4.app.FragmentTransaction英尺= fm.beginTransaction();
ft.replace(R.id.frame_container,TF);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(空);
ft.commit();
}
});
checkout.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图查看){
CheckoutBeforeLogin TF =新CheckoutBeforeLogin();
android.support.v4.app.FragmentManager FM = getFragmentManager();
android.support.v4.app.FragmentTransaction英尺= fm.beginTransaction();
ft.replace(R.id.frame_container,TF);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(空);
ft.commit();
}
});
返回rootView;
}
}
您一直在呼吁 displayView()
在列表中选择索引位置 NavDrawerItems
。在用户注销的情况下,只有2列表中的项目。当用户选择登录,该指数的位置是1,而不是5。
您可能想多一个变量添加到 NavDrawerItem
从而重新presents其中片段
时显示用户选择该项目。你可以使用任何的 INT
值,然后被传递到 displayView()
,或者您可以使用的类名在片段
显示。
编辑:添加例如code
在 NavDrawerItem
,你应该是这样的:
字符串称号;
图标图标;
添加以下内容:
INT thingToDo;
然后,在 NavDrawerItem
的构造函数, INT
参数添加到构造函数初始化该领域,如这样的:
公共NavDrawerItem(字符串名称,图标图标,诠释thingToDo){
this.title =称号;
this.icon =图标;
this.thingToDo = thingToDo;
}
更改所有来电,创造新的 NavDrawerItem
实例包括事情,是这样的:
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1),0));
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1),5));
然后,在 SlideMenuClickListener.onItemClick()
方法,做到这一点:
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
长ID){
//获取所选择的项目
NavDrawerItem项目= navDrawerItems.get(位置);
对选定的导航抽屉的项目//显示视图
displayView(item.thingToDo);
}
I have one NavigationDrawer
in my Application and I have five items in my drawer:
- Home
- Accounts
- stock
- help
- logout
Now if user click on logout it is displaying two items:
- Home
- Login
Now the issue is when user click on login it always getting view of Accounts
public class MainActivity extends FragmentActivity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private String abc;
private Intent ii;
// nav drawer title
private CharSequence mDrawerTitle;
// used to store app title
private CharSequence mTitle;
// slide menu items
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
prefs.edit().putBoolean("locked", true).commit();
ii=getIntent();
mTitle = mDrawerTitle = getTitle();
// load slide menu items
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
// nav drawer icons from resources
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
navDrawerItems = new ArrayList<NavDrawerItem>();
// empty the adapter array
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1), 0));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), 5));
/*navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));*/
// navDrawerItems.remove(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
// What's hot, We will add a counter here
//navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
// Recycle the typed array
//navMenuIcons.recycle();
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// setting the nav drawer list adapter
adapter = new NavDrawerListAdapter(getApplicationContext(),
navDrawerItems);
mDrawerList.setAdapter(adapter);
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
//boolean isUserLoggedOut = getPrefBoolean("pref_is_user_logged_out",false);
//Boolean isUserLoggedOut = prefs.getBoolean("locked", false);
/*
boolean locked = true;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences();*/
// Check Condition and Update list as required
/*if(isUserLoggedOut){
navDrawerItems.clear();
// Home
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1),0)); // Login
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1),5));
}else{
navDrawerItems.clear();
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1),0));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1),1));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1),2));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1),3));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1),4));
}
adapter.notifyDataSetChanged();
*/
// calling onPrepareOptionsMenu() to hide action bar icons
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
// on first time display view for first nav item
displayView(0);
}
}
/**
* Slide menu item click listener
* */
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
// Get the item that was selected
NavDrawerItem item = navDrawerItems.get(position);
// display view for selected nav drawer item
displayView(item.thingToDo);
if(position == 4) { // position of Sign out button
navDrawerItems.clear(); // empty the adapter array
navMenuIcons.recycle();
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1),0));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1),5));
//navDrawerItems.remove(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
adapter.notifyDataSetChanged();
}
else {
if (ii.hasExtra("login")) {
abc = ii.getStringExtra("login");
if (abc == ii.getStringExtra("login")) {
navDrawerItems.clear();
navMenuIcons.recycle();
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1),0));
// Find People
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1),1));
// Photos
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1),2));
// Communities, Will add a counter here
navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1),3));
// Pages
navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1),4));
// navDrawerItems.remove(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
adapter.notifyDataSetChanged();
Toast.makeText(MainActivity.this, "success" + abc, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "unsuccess" + abc, Toast.LENGTH_LONG).show();
}
}
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
/* *
* Called when invalidateOptionsMenu() is triggered
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// if nav drawer is opened, hide the action items
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
return super.onPrepareOptionsMenu(menu);
}
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
case 1:
fragment = new FindPeopleFragment();
break;
case 2:
fragment = new PhotosFragment();
break;
case 3:
fragment = new CommunityFragment();
break;
case 4:
fragment = new LoginActivity();
break;
case 5:
fragment = new LoginActivity();
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");
}
}
@Override
public void setTitle(CharSequence title) {
mTitle = title;
getActionBar().setTitle(mTitle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Pass any configuration change to the drawer toggls
mDrawerToggle.onConfigurationChanged(newConfig);
}
}
Adapter
public class NavDrawerListAdapter extends BaseAdapter {
private Context context;
private ArrayList<NavDrawerItem> navDrawerItems;
public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){
this.context = context;
this.navDrawerItems = navDrawerItems;
}
@Override
public int getCount() {
return navDrawerItems.size();
}
@Override
public Object getItem(int position) {
return navDrawerItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.drawer_list_item, null);
}
ImageView imgIcon = (ImageView) convertView.findViewById(R.id.icon);
TextView txtTitle = (TextView) convertView.findViewById(R.id.title);
TextView txtCount = (TextView) convertView.findViewById(R.id.counter);
imgIcon.setImageResource(navDrawerItems.get(position).getIcon());
txtTitle.setText(navDrawerItems.get(position).getTitle());
// displaying count
// check whether it set visible or not
if(navDrawerItems.get(position).getCounterVisibility()){
txtCount.setText(navDrawerItems.get(position).getCount());
}else{
// hide the counter view
txtCount.setVisibility(View.GONE);
}
return convertView;
}
}
Login_Activity
public class LoginActivity extends Fragment{
public LoginActivity(){}
private Button alreadymember;
private Button checkout;
private Button forgotpass;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.login_activity, container, false);
alreadymember=(Button)rootView.findViewById(R.id.btn_login_alredymember);
forgotpass=(Button)rootView.findViewById(R.id.login_forgot_pwd);
checkout=(Button)rootView.findViewById(R.id.checkout_login);
alreadymember.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(getActivity(),MainActivity.class);
intent.putExtra("login","login");
startActivity(intent);
/* HomeFragment tf = new HomeFragment();
android.support.v4.app.FragmentManager fm = getFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("login", "login");
tf.setArguments(bundle);
ft.replace(R.id.frame_container, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();*/
}
});
forgotpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Forgot_Password tf = new Forgot_Password();
android.support.v4.app.FragmentManager fm = getFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_container, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
});
checkout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CheckoutBeforeLogin tf = new CheckoutBeforeLogin();
android.support.v4.app.FragmentManager fm = getFragmentManager();
android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.frame_container, tf);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
});
return rootView;
}
}
You are always calling displayView()
with the selected index position in the list of NavDrawerItems
. In the case where the user is logged out, there are only 2 items in the list. When the user chooses "login", the index position is 1, not 5.
You probably want to add one more variable to NavDrawerItem
which represents which Fragment
to show when the user selects that item. You could use either an int
value which is then passed to displayView()
, or your could use the class name of the Fragment
to show.
EDIT: Add example code
In NavDrawerItem
, you should have something like:
String title;
Icon icon;
add the following:
int thingToDo;
Then, in the constructor of NavDrawerItem
, add an int
parameter to the constructor to initialize the field, like this:
public NavDrawerItem(String title, Icon icon, int thingToDo) {
this.title = title;
this.icon = icon;
this.thingToDo = thingToDo;
}
change all your calls that create new NavDrawerItem
instances to include the "thing to do", like this:
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1), 0));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1), 5));
Then, in SlideMenuClickListener.onItemClick()
method, do this:
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// Get the item that was selected
NavDrawerItem item = navDrawerItems.get(position);
// display view for selected nav drawer item
displayView(item.thingToDo);
}
这篇关于抽屉式导航栏列表视图位置不刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!