抽屉式导航栏列表视图不清爽时listItems [英] Navigation Drawer listview not refreshing listitems
问题描述
我创建一个应用程序,和我使用 NavigationDrawer
和片段
在我的应用程序,现在的问题是我有五个 ListItems的
在 NavigationDrawer
是这样的。
- 首页
- 编辑个人资料
- 我的订单
-Signout
- 帮助
现在当signout用户点击,所有的listItems中应隐藏,只有登入资讯应该可见。
下面是我的片断code
公共类MainActivity扩展FragmentActivity {
私人DrawerLayout mDrawerLayout;
私人的ListView mDrawerList;
私人ActionBarDrawerToggle mDrawerToggle;
私人字符串ABC;
私人意图二;
//导航抽屉称号
私人的CharSequence mDrawerTitle;
//用于存储应用程序标题
私人的CharSequence mTitle;
//滑动菜单项
私有String [] navMenuTitles;
私人TypedArray navMenuIcons;
私人的ArrayList< NavDrawerItem> navDrawerItems;
私人NavDrawerListAdapter适配器;
@覆盖
保护无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main);
二= 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)));
//查找人员
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.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);
//调用prepareOptionsMenu()隐藏操作栏图标
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
如果(savedInstanceState == NULL){
//关于第一导航项目首次显示视图
displayView(0);
}
}
/ **
*滑动菜单项,点击监听器
* * /
私有类SlideMenuClickListener工具
ListView.OnItemClickListener {
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,
长ID){
对选定的导航抽屉的项目//显示视图
displayView(位置);
如果(位置== 4){//的退出按钮位置
navDrawerItems.clear(); //清空适配器阵列
navMenuIcons.recycle();
navDrawerItems.add(新NavDrawerItem(navMenuTitles [0],navMenuIcons.getResourceId(0,-1)));
navDrawerItems.add(新NavDrawerItem(navMenuTitles [5],navMenuIcons.getResourceId(5,-1)));
//navDrawerItems.add(new NavDrawerItem(navMenuTitles [signoutIndex],navMenuIcons.getResourceId(signoutIndex,-1));
adapter.notifyDataSetChanged();
}
其他
{
如果(ii.hasExtra(登录))
{
ABC = ii.getStringExtra(登录);
如果(abc.equals(登录))
{
navDrawerItems.clear();
navDrawerItems.add(新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)));
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);
}
} LoginActivity.java
公共类LoginActivity扩展片段{
公共LoginActivity(){}
私人按钮alreadymember;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
最后查看rootView = inflater.inflate(R.layout.login_activity,集装箱,假);
alreadymember =(按钮)rootView.findViewById(R.id.btn_login_alredymember);
alreadymember.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图查看){
HomeFragment TF =新HomeFragment();
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;
}
}
你不应该试图隐藏抽屉里的物品。我只想更新适配器,删除你不需要的物品,然后使它无效。
当用户点击 Signout
,我只想做这样的事情:
@覆盖
公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长的id){
对选定的导航抽屉的项目//显示视图
displayView(位置);
//如果使用固定位置
如果(位置== 6){//的退出按钮位置
navDrawerItems.clear(); //清空适配器阵列
navDrawerItems.add(新NavDrawerItem(navMenuTitles [signoutIndex],navMenuIcons.getResourceId(signoutIndex,-1));
adapter.notifyDataSetChanged();
}
}
I am creating one app,and i am using NavigationDrawer
and Fragments
in my application,now issue is I have five ListItems
in NavigationDrawer
like this.
-Home
-Edit Profile
-My orders
-Signout
-Help
Now when user click on signout,all the listitems should hide and only signin should visible..
following is my snippet code
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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>();
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)));
// 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);
// 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
displayView(position);
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)));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
//navDrawerItems.add(new NavDrawerItem(navMenuTitles[signoutIndex], navMenuIcons.getResourceId(signoutIndex, -1));
adapter.notifyDataSetChanged();
}
else
{
if(ii.hasExtra("login"))
{
abc=ii.getStringExtra("login");
if(abc.equals("login"))
{
navDrawerItems.clear();
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)));
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);
}
} LoginActivity.java
public class LoginActivity extends Fragment{
public LoginActivity(){}
private Button alreadymember;
@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);
alreadymember.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
HomeFragment tf = new HomeFragment();
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 shouldn't try to hide the drawer items. I would just update the adapter, remove the items you don't need and then invalidate it.
When the user clicks on Signout
, I would just do something like this:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// display view for selected nav drawer item
displayView(position);
// if using fixed positions
if(position == 6) { // position of Sign out button
navDrawerItems.clear(); // empty the adapter array
navDrawerItems.add(new NavDrawerItem(navMenuTitles[signoutIndex], navMenuIcons.getResourceId(signoutIndex, -1));
adapter.notifyDataSetChanged();
}
}
这篇关于抽屉式导航栏列表视图不清爽时listItems的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!