Comment faire pour actualiser la liste de la navigation tiroir dès que son ouvert/fermé dans Android
J'ai créé tiroir de navigation et l'affichage des éléments dans la liste. Ma liste est statique, mais je suis de l'affichage des points. Ainsi, lorsque des utilisateurs de sélectionner les éléments dans la liste et faire un peu d'activité, il a obtenu des points. Je tiens donc à mettre à jour les points dès qu'il reçoit. Comment puis-je faire cela./
Ci-dessous mon code:
Classe D'Activité:
@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;
}
}
vous voulez vous rafraîchir la navigation tiroir de la liste dès qu'il ouvre ou fermé??
ouais c'est ce que je veux.
ouais c'est ce que je veux.
OriginalL'auteur rupesh | 2014-06-01
Vous devez vous connecter pour publier un commentaire.
Enfin, j'ai corrigé cela en utilisant de code ci-dessous.Ce n'est pas la bonne solution. mais encore, je tiens à répondre à cette afin que d'autres puissent obtenir la référence de cette. @user3154663. Peut-être ce sera vous aider à résoudre votre problème:
OriginalL'auteur rupesh
Appel de notifyDatasetChanged() s'applique encore à la liste de l'adaptateur, indépendamment de ListView parent. vous devez réinitialiser l'adaptateur à l'aide notifyDatasetChanged() lorsque le tiroir est ouvert et fermer et mise à jour la liste à l'aide de setadapter.
onDrawerOpen et onDrawerClosed
dans ce code, vous voulez me faire changer mDrawerToggle = new ActionBarDrawerToggle(ce, mDrawerLayout, R. drawable.ic_drawer, R. string.drawer_open, R. string.drawer_close) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(Vue drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } };
R u fait ou encore bloqué?
toujours bloqué dans la même page
OriginalL'auteur Pankaj Arora
Chaque fois que vous souhaitez mettre à jour le Tiroir de Mise en page, mise à jour de l'adaptateur personnalisé en appelant,
adapter.notifyDataSetChanged();
et ensuite appelermDrawerLayout.invalidate();
Assurez-vous que le
getView()
méthode à l'intérieur de votre adaptateur récupère la dernière valeur de points.où, exactement, est-ce que votre utilisateur d'obtenir le plus de points ?
sa vient du serveur, quand je ouvrir le tiroir menu où également l'affichage des points est d'obtenir le changement, mais pas dans un tiroir.
OriginalL'auteur Shivam Verma
Si vous souhaitez mettre à jour le tiroir éléments lorsque l'utilisateur a sélectionné un élément dans le tiroir.
Puis
onItemClick
.notifydatasetchange()
pour refléter les modifications.Mais, si vous voulez si l'utilisateur a sélectionné un élément dans la liste, puis sur la fermeture de tiroir après avoir fait la sélection, vous voulez mettre à jour la liste, dans ce cas, vous
Écouter de la fermeture du tiroir de l'événement -
public void onDrawerClosed(View view) {
//actualisation de la carte et de les appeler en aviser ensemble de données de modification.
}
Ce lien explique les différents événements pour tiroir
OriginalL'auteur guptakvgaurav
Une façon est,
Dans l'adaptateur de la
listview
que vous avez affiché dans ladrawer
, dansgetView()
, lors de la création de chaque point de vue, vous pouvez enregistrer un écouteur en passant par la vue de mettre à jour. Lorsque vous obtenez les points de vérifier si la vue est null(peut-être que ce n'est pas à l'écran), et de mettre à jour la vue si pas. 🙂Mise à JOUR
Si vous souhaitez actualiser votre liste sur
open/close
vous mai besoin de quelque chose comme ceTiroir Auditeur
Qui contient les rappels suivants
Sur ces rappels vous call call
notifyDataSetChanged
de mettre à jour listViewjetez un coup d'oeil sur mon dernier code et me dire quoi et où j'ai besoin de changer.
Qui dans la vue de mise en page que vous souhaitez modifier dynaimically ?
je n'ai pas compris ce que vous avez demandé?
Au lieu de l'actualisation de la vue complète, vous pouvez mettre à jour les lignes dans la liste. Il est le plus efficace. Permettez-moi donc de connaître le point de vue que vous devez mettre à jour dans chaque ligne
OriginalL'auteur Viswanath Lekshmanan
Vous pouvez appeler l'élément à partir de la fenêtre des éléments de l'objet.
OriginalL'auteur Mario Alzate