ive에 가시성을 구현하면 java.lang.NullPointerException이 발생하지만 며칠 동안이 작업을하고 있습니다. luck.i는 Facebook의 상태 변경 세션에 따라 메뉴 항목의 가시성을 구현하고 있습니다. 내 애플 리케이션.메뉴 항목
로그인 활동에서 메뉴 항목을 숨기면 액세스가 인증되면 물론 메뉴 자체가 표시됩니다.
메뉴 코드 :이 필드
MenuItem menu;
그래서 당신은이 널 (null) 초기화되지 않은 코드에
@SuppressLint({ "InlinedApi", "NewApi" })
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main, menu);
menu.findItem(R.id.action_previous).setEnabled(viewPager.getCurrentItem() > 0);
// Add either a "next" or "finish" button to the action bar, depending on which page
// is currently selected.
MenuItem item = menu.add(Menu.NONE, R.id.action_next, Menu.NONE, (viewPager.getCurrentItem() == adapter.getCount() - 1)
? R.string.action_finish
: R.string.action_next);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu1 = menu;
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
if (itemId == R.id.action_previous) {
// Go to the previous step in the wizard. If there is no previous step,
// setCurrentItem will do nothing.
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
return true;
} else if (itemId == R.id.action_next) {
// Advance to the next step in the wizard. If there is no next step, setCurrentItem
// will do nothing.
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
return true;
}
return super.onOptionsItemSelected(item);
}
*************************
ViewPager viewPager;
PagerAdapter adapter;
// public int mState = 1;
Menu menu1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupFacebookConnect(savedInstanceState);
int[] bookCover = new int[] {
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
};
// Locate the ViewPager in viewpager_main.xml
viewPager = (ViewPager) findViewById(R.id.pager);
// Pass results to ViewPagerAdapter Class
adapter = new ViewPagerAdapter(this, bookCover);
// Binds the Adapter to the ViewPager
viewPager.setAdapter(adapter);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@SuppressLint("NewApi")
@Override
public void onPageSelected(int position) {
// When changing pages, reset the action bar actions since they are dependent
// on which page is currently active. An alternative approach is to have each
// fragment expose actions itself (rather than the activity exposing actions),
// but for simplicity, the activity provides the actions in this sample.
//mState = 1;
invalidateOptionsMenu();
}
});
Button facebook_connect = (Button) findViewById(R.id.facebook_login);
facebook_connect.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (isFacebookConnected()) {
disConnectFacebook();
} else {
connectFacebook();
}
}
});
}
********************
facebook onState:
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
// Check if the user is authenticated and
// a deep link needs to be handled.
if (state.isOpened()) {
MenuItem item = menu1.findItem(R.id.action_next);
item.setVisible(true);
viewPager.setVisibility(View.VISIBLE);
} else if (state.isClosed()) {
// Make the recipe list hidden
//
// MenuItem item = menu.findItem(R.menu.main);
// item.setVisible(false);
// viewPager.setVisibility(View.INVISIBLE);
}
}
logcat 게시 – kstachniuk
MenuItem 메뉴를 선언했지만 초기화하지 않았습니다. onCreateOptionsMenu() 안에 this.menu = menu 넣기 – Tsunaze
@kstachniuk 님이 logcat을 추가했습니다. – jovs